查询错误 (1248):每个派生 table 必须有自己的别名 INNER JOIN

Error in query (1248): Every derived table must have its own alias INNER JOIN

我想在 2 个表上使用 INNER JOIN,但是当我尝试以下任一语句时,我得到

Error in query (1248): Every derived table must have its own alias

SELECT DISTINCT(t2.col)
FROM tab2 as t2
INNER JOIN (
  SELECT DISTINCT(t1.col)
  FROM tab1 as t1
  WHERE t1.id>678 AND t1.id<5248
) ON t2.col=t1.col
WHERE t2.id>10 AND t2.id<3770

SELECT DISTINCT(col)
FROM tab2 as t2
INNER JOIN (
  SELECT DISTINCT(col)
  FROM tab1 as t1
  WHERE t1.id>678 AND t1.id<5248
) ON t2.col=t1.col
WHERE t2.id>10 AND t2.id<3770

有什么问题?

您需要为连接提供别名:

SELECT DISTINCT(t2.col) 
FROM tab2 as t2 
INNER JOIN (
   SELECT DISTINCT(t1.col) 
   FROM tab1 as t1 
   WHERE t1.id>678 AND t1.id<5248
) as myJoinName ON t2.col=myJoinName.col 
WHERE t2.id>10 AND t2.id<3770

重复第二个查询。您还需要更改加入方式以使用此别名,因为 t1 将超出加入条件的范围。

您需要为您的加入添加一个别名table:

SELECT DISTINCT(t2.col) FROM tab2 as t2 INNER JOIN (SELECT DISTINCT(t1.col) FROM tab1 as t1 WHERE t1.id>678 AND t1.id<5248) as t3 ON t2.col=t3.col WHERE t2.id>10 AND t2.id<3770

Error in query (1248): Every derived table must have its own alias

这个错误是不言自明的,是由于您的子查询没有分配别名引起的。事实上,每个派生的 table 都需要一个别名,即使您不使用它也是如此。尝试以下查询:

SELECT DISTINCT t2.col
FROM tab2 as t2
INNER JOIN
(
    SELECT DISTINCT t.col
    FROM tab1 t
    WHERE t.id > 678 AND t.id < 5248
) t1
    ON t2.col = t1.col
WHERE t2.id > 10 AND t2.id < 3770

SELECT DISTINCT col 
FROM tab2 as t2
INNER JOIN
(
    SELECT DISTINCT col 
    FROM tab1 as t
    WHERE t.id > 678 AND t.id < 5248
) t1
    ON t2.col = t1.col
WHERE t2.id > 10 AND t2.id < 3770