SELECT DISTINCT NAME
FROM employee MINUS
SELECT NAME FROM salary;
SELECT DISTINCT NAME
FROM employee
WHERE NAME NOT IN (SELECT NAME
FROM salary);
本以为结果应该是相同的,但事实并非如此。有谁解释一下为什么不行吗?
最佳答案
MINUS
不是 MS SQL Server 中支持的关键字。如果您查看执行计划,它会将 MINUS
解析为 employee
的表别名 - 它相当于:
SELECT DISTINCT [MINUS.]NAME
FROM employee [AS] MINUS
然后整个查询被解析为两个单独的查询:
SELECT DISTINCT [MINUS.]NAME
FROM employee [AS] MINUS
<-- break -->
SELECT NAME FROM salary
其中隐含术语位于括号中 ([]
)
SQL Fiddle 似乎没有正确显示多个结果集。
与 SQL Server 中 Oralcle 的 MINUS
等效的关键字是 EXCEPT
:
SELECT DISTINCT NAME
FROM employee EXCEPT
SELECT NAME FROM salary;
关于sql - NOT IN 与 MINUS 不会产生相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26489303/