我有 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 吗?
但是我不断得到零或没有行返回。这是为什么?
我有 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 吗?
但是我不断得到零或没有行返回。这是为什么?
我真的不知道,但你有没有试过SELECT id FROM tbl1 WHERE id NOT IN (SELECT id FROM tbl2)
比较null
总是会导致unknown
如果您想查看是否有某些内容,则null
必须使用is
运算符。
为了获得所需的结果,请尝试使用:
SELECT id FROM tbl1 WHERE id NOT IN (SELECT id FROM tbl2);
因为您的初始查询仅在tbl2
恰好包含 1 条记录时才有效。
NULL
是一个特殊值,您应该在检查它时使用value IS NULL
或。value IS NOT NULL
子选择可能非常昂贵,请尝试使用此左连接
SELECT tbl1.id FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id WHERE tbl2.id IS NULL