1

我有两张桌子

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”

4

3 回答 3

3

您快到了,但请注意,您只能在子句的FROM子句中引用表中的列WHERE。所以你可能想做这样的事情:

SELECT * 
FROM   T2
WHERE  T2.id NOT IN
(SELECT T1.t2_id FROM T1)
于 2013-10-14T16:29:15.100 回答
3

你有它倒退:

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 上有一个索引,这样才能正常运行。

于 2013-10-14T16:29:18.660 回答
1

我想获取 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 几乎就像日常语言一样。几乎。

于 2013-10-14T16:29:09.970 回答