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

Per*_*erd 2 sql sql-server-2008

在这里小提琴

SELECT DISTINCT NAME 
FROM employee MINUS 
SELECT NAME FROM salary;

SELECT DISTINCT NAME 
FROM employee 
WHERE NAME NOT IN (SELECT NAME 
                   FROM salary);
Run Code Online (Sandbox Code Playgroud)

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

D S*_*ley 5

MINUS在MS SQL Server中不是受支持的关键字.如果您查看执行计划,它将解析 MINUS为表别名employee- 它相当于:

SELECT DISTINCT [MINUS.]NAME 
FROM employee [AS] MINUS 
Run Code Online (Sandbox Code Playgroud)

然后将整个查询解析为两个单独的查询:

SELECT DISTINCT [MINUS.]NAME 
FROM employee [AS] MINUS 
<-- break -->
SELECT NAME FROM salary
Run Code Online (Sandbox Code Playgroud)

其中隐含条款在括号内([])

SQL Fiddle似乎没有正确显示多个结果集.

MINUSSQL Server中Oralcle的等效关键字是EXCEPT:

SELECT DISTINCT NAME 
FROM employee EXCEPT 
SELECT NAME FROM salary;
Run Code Online (Sandbox Code Playgroud)

  • 这只是两个查询 - "SELECT DISTINCT NAME FROM employee AS [MINUS]`和`SELECT NAME FROM salary;`.万岁可选分号! (2认同)