这是我的桌子
当我使用NOT IN执行以下查询时,它给了我namal和Ann。
SELECT firstname
FROM info.student_info
WHERE firstname NOT IN (SELECT firstname
FROM info.student_info
WHERE lastname IS NULL)
但是当我使用NOT EXISTS执行以下查询时,它没有给我任何行。
SELECT firstname
FROM info.student_info
WHERE NOT EXISTS (SELECT firstname
FROM info.student_info
WHERE lastname IS NULL)
这是为什么?我已经研究了NOT IN和NOT EXISTS的一些领域,但未能找到答案。
答案 0 :(得分:11)
NOT IN
为true。
当子查询没有返回任何内容时,NOT EXISTS
为真。
答案 1 :(得分:2)
您尚未加入NOT EXISTS
查询中的表格,这就是为什么您没有从第二次查询中获得任何结果。
只有当子查询根本找不到记录时,您的第二个查询才会返回结果。
将您的查询更改为连接到外部表的firstname列,然后您可能会得到结果。
SELECT firstname
FROM info.student_info
WHERE NOT EXISTS (SELECT b.firstname
FROM info.firstname b
WHERE b.lastname IS NULL
AND b.firstname = a.firstname
)
免责声明:未测试查询
答案 2 :(得分:1)
您的NOT EXISTS
不区分名字,因此子选择将始终返回2行。
要使用NOT EXISTS执行相同的操作,您需要使用以下SQL:
SELECT firstname FROM info.student_info
WHERE NOT EXISTS
(SELECT firstname f2 FROM info.student_info
WHERE lastname IS NULL
AND f2 = firstname)