我想知道以下示例中的Minus和子查询之间的区别。我得到了两个不同的结果。基本上我试图找到第一个而不是第二个表中存在的记录。
查询1:
select count(*) from (
(select OrderID
from DB.Orders)
MINUS
(SELECT OrderID
FROM DB.Shipments)) as abc;
QUERY2:
select count(*) from (
select OrderID
from DB.Orders as a1
where a1.OrderID Not in
(SELECT OrderID
FROM DB.Shipments)) as sub;
答案 0 :(得分:2)
有两种可能性:
在查询1中,MINUS
为implicitly MINUS DISTINCT
。试试MINUS ALL
。
在查询2中,NOT IN
对NULL
值的效果不佳。 OrderID
中NULL
允许DB.Shipments
吗?在子查询中尝试SELECT OrderID FROM DB.Shipments WHERE OrderID IS NOT NULL
。
答案 1 :(得分:0)
这将帮助您排除故障:
select count(*), count(OrderID), count(distinct OrderID) from DB.Orders
这三个数字是否相同?