为什么:
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?
在 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)