使用SQL从db获取某些记录

问题描述 投票:-1回答:2

我有一个表有多个记录,其中PLACE_ORDER条目不存在,即订单#594886579291。我想只获取PLACE_ORDER行不存在的订单,如594886579291。

如果我做一个简单的查询,如

SELECT * FROM ORDER_STATUS os WHERE os.SERVICE_NAME != 'OC'.

它返回没有OC的订单594886579290和594886579295。我只需要594886579291。

我试过自己加入,但没有运气。

仅供参考 - 我正在使用DB2。

Table structure

sql db2 self-join
2个回答
0
投票

如果您只想要订单号:

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'
                 );

0
投票

其他方式:

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'
     )
© www.soinside.com 2019 - 2024. All rights reserved.