使用 SQL 从数据库中获取某些记录

Fetch certain records from db using SQL

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

如果我做一个像

这样的简单查询
SELECT * FROM ORDER_STATUS os WHERE os.SERVICE_NAME != 'OC'.

它 returns 订购 594886579290 和 594886579295 没有 OC。我只要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:

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