我有一个表有多个记录,其中PLACE_ORDER条目不存在,即订单#594886579291。我想只获取PLACE_ORDER行不存在的订单,如594886579291。
如果我做一个简单的查询,如
SELECT * FROM ORDER_STATUS os WHERE os.SERVICE_NAME != 'OC'.
它返回没有OC的订单594886579290和594886579295。我只需要594886579291。
我试过自己加入,但没有运气。
仅供参考 - 我正在使用DB2。
如果您只想要订单号:
SELECT order_number
FROM ORDER_STATUS os
GROUP BY order_number
HAVING SUM(CASE WHEN os.SERVICE_NAME = 'OC' THEN 1 ELSE 0 END) = 0;
如果您想要完整的订单详情,请使用NOT EXISTS
:
SELECT os.*
FROM ORDER_STATUS os
WHERE NOT EXISTS (SELECT 1
FROM ORDER_STATUS os2
WHERE os2.order_number = os.order_number AND
os2.SERVICE_NAME = 'OC'
);
其他方式:
SELECT ORDER_NUMBER FROM ORDER_STATUS WHERE SERVICE_NAME != 'OC'
MINUS
SELECT ORDER_NUMBER FROM ORDER_STATUS WHERE SERVICE_NAME = 'OC'
这也可以用作更大查询的子选择:
SELECT *
FROM ORDER_STATUS
WHERE ORDER_NUMBER IN (
SELECT ORDER_NUMBER FROM ORDER_STATUS WHERE SERVICE_NAME != 'OC'
MINUS
SELECT ORDER_NUMBER FROM ORDER_STATUS WHERE SERVICE_NAME = 'OC'
)