MYSQL新手和子查询

MYSQL新手和子查询,mysql,Mysql,我有两张桌子 T1 T2 id id name name t2_id 我想得到所有在T1中没有链接的T2记录,我该怎么做? 我尝试了子查询,但失败了 SELECT * FROM T2 WHERE T1.t2_id NOT IN (SELECT T2.id FROM T2) 错误代码:1054。“in/ALL/ANY子查询”中的未知列“T1.t2_id” 我想获取所有未在T1中链接的T2记录,如何才能做到这一点 T1中的是 当然,到T2的链接是通过T2.id完成的,所

我有两张桌子

T1      T2
id      id
name    name
t2_id
我想得到所有在T1中没有链接的T2记录,我该怎么做? 我尝试了子查询,但失败了

SELECT * FROM T2
WHERE T1.t2_id NOT IN
(SELECT T2.id FROM T2)
错误代码:1054。“in/ALL/ANY子查询”中的未知列“T1.t2_id”

我想获取所有未在T1中链接的T2记录,如何才能做到这一点

T1中的是

当然,到T2的链接是通过T2.id完成的,所以

似乎是你想要的


如果仔细看一下,SQL几乎就像日常语言一样。差不多了。

差不多了,但是请注意,您只能在WHERE子句的from子句中引用表中的列。 所以你可能想做这样的事情:

SELECT * 
FROM   T2
WHERE  T2.id NOT IN
(SELECT T1.t2_id FROM T1)
你把它倒过来:

SELECT *
FROM T2
WHERE id NOT IN (SELECT t2_id FROM T1)
这也可以写成外部连接,MySQL通过这种方式表现得更好:

SELECT T2.*
FROM T2
LEFT JOIN T1 ON T1.t2_id = T2.id
WHERE T1.id IS NULL

确保在T1.t2\u id上有一个索引,这样才能很好地执行此操作。

我需要获取所有t2records@Goku将您的查询与您想要的内容进行仔细比较。为什么-1?我迷路了,我能寻求帮助吗?
SELECT *
FROM T2
WHERE id NOT IN (SELECT t2_id FROM T1)
SELECT T2.*
FROM T2
LEFT JOIN T1 ON T1.t2_id = T2.id
WHERE T1.id IS NULL