我有两张桌子
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
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”
您快到了,但请注意,您只能在子句的FROM
子句中引用表中的列WHERE
。所以你可能想做这样的事情:
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_id 上有一个索引,这样才能正常运行。
我想获取 T1 中未链接的所有 T2 记录,我该怎么做?
里面的T1
是
SELECT T1.t2_id FROM T1
当然,链接T2
是通过 完成的T2.id
,所以
SELECT * FROM T2
WHERE T2.id NOT IN
(SELECT T1.t2_id FROM T1)
似乎是你想要的。
如果您仔细观察,SQL 几乎就像日常语言一样。几乎。