为什么这会给出一个空的结果?我正在努力获得非主管员工的最低,最高和平均水平。
SELECT MIN(salary), MAX(salary), AVG(salary)
FROM employee
WHERE ssn NOT IN
(SELECT superssn FROM employee)
员工表的一部分
SSN SUPERSSN
--------- ---------
888665555
333445555 888665555
987654321 888665555
987987987 987654321
123456789 333445555
999887777 987654321
666884444 333445555
453453453 333445555
答案 0 :(得分:2)
您需要从内部查询中排除空值。否则,外部查询将检查其中一个列表值为NULL并且该比较不返回任何内容的列表。所以,正确的查询应该是类似的。
SELECT MIN(salary), MAX(salary), AVG(salary)
FROM employee
WHERE ssn NOT IN
(SELECT superssn FROM employee where superssn IS NOT NULL)
答案 1 :(得分:2)
这就是为什么NOT EXISTS语义正确且更可靠
SELECT MIN(salary), MAX(salary), AVG(salary)
FROM employee E
WHERE NOT EXISTS (SELECT * FROM employee E2 WHERE E.ssn = E2.superssn)
由于布尔逻辑,NOT IN列表中的任何NULL总是会给出错误。你有一个NULL superssn值。