NOT IN vs MINUS不会产生相同的结果

时间:2014-10-21 14:34:20

标签: sql sql-server-2008

fiddle here

SELECT DISTINCT NAME 
FROM employee MINUS 
SELECT NAME FROM salary;

SELECT DISTINCT NAME 
FROM employee 
WHERE NAME NOT IN (SELECT NAME 
                   FROM salary);

认为结果应该是相同的,但事实并非如此。有人解释为什么不是吗?

1 个答案:

答案 0 :(得分:5)

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&#39; s MINUS的等效关键字为EXCEPT

SELECT DISTINCT NAME 
FROM employee EXCEPT 
SELECT NAME FROM salary;