UNION ALL w/ MINUS

Kev*_*ith 3 oracle minus

为什么:

select 1 FROM DUAL 
UNION ALL
select 1 FROM DUAL
MINUS
SELECT 2 FROM DUAL
Run Code Online (Sandbox Code Playgroud)

在 Oracle 中只返回单行1而不是 2 行1

Mar*_*ith 6

在 Oracle 中,所有集合运算符目前都具有相同的优先级,并从上到下进行评估。

SELECT 1
FROM   DUAL
UNION ALL
SELECT 1
FROM   DUAL;
Run Code Online (Sandbox Code Playgroud)

返回两行,两列都包含 1。

minus操作类似于union(而不是union all)并删除重复项,从而distinct使结果变得清晰。

得到自己想要的是添加括号以使得结果的一种方式(1)Union all-ed到的结果(1) MINUS (2)

SELECT 1
FROM   DUAL
UNION ALL
(SELECT 1
 FROM   DUAL
 MINUS
 SELECT 2
 FROM   DUAL);
Run Code Online (Sandbox Code Playgroud)