使用 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'
)
我有一个 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'
)