2

我有 2 张桌子

表 1 tbl1

ID | Name
1  | stack

表2 tbl2(空表)

ID | Name

我有这个查询

SELECT id FROM tbl1 WHERE id != (SELECT id FROM tbl2)

我的子查询返回 null,这意味着 WHERE 比较是 id != null 并且由于我的 id = 1,它不应该显示 id 1 吗?

但是我不断得到零或没有行返回。这是为什么?

4

4 回答 4

2

我真的不知道,但你有没有试过SELECT id FROM tbl1 WHERE id NOT IN (SELECT id FROM tbl2)

于 2012-05-05T14:14:30.597 回答
2

比较null总是会导致unknown

如果您想查看是否有某些内容,则null必须使用is运算符。

于 2012-05-05T14:15:11.643 回答
1

为了获得所需的结果,请尝试使用:

SELECT id FROM tbl1 WHERE id NOT IN (SELECT id FROM tbl2);

因为您的初始查询仅在tbl2恰好包含 1 条记录时才有效。

NULL是一个特殊值,您应该在检查它时使用value IS NULL或。value IS NOT NULL

于 2012-05-05T14:16:50.493 回答
0

子选择可能非常昂贵,请尝试使用此左连接

SELECT tbl1.id FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id WHERE tbl2.id IS NULL
于 2012-05-05T14:17:58.743 回答