我有一个包含订单详细信息的SQL表。
表例
order_id | item_type | stock_code | price_code
----------------------------------------------
1 | S | 0005-01 | NULL
1 | P | NULL | PRC-1
1 | S | 0004 | NULL
2 | S | 0005-02 | NULL
2 | S | 0004 | NULL
Run Code Online (Sandbox Code Playgroud)
我正在尝试返回所有order_id,其中订单包含以0005开头的股票代码,但不包含以PRC开头的价格代码
我的尝试
SELECT order_id
FROM order_detail as ordDetail
WHERE EXISTS(
SELECT *
FROM order_detail as ordDetail2
WHERE ordDetail2.order_id = ordDetail.order_id
AND stock_code LIKE '0005-%'
AND price_code NOT LIKE 'PRC%'
)
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它似乎忽略了price_code NOT LIKE参数?
预期成绩
order_id
--------
2
2
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我也希望order_id也是唯一的:/
我们可以以您的尝试为基础:
SELECT od.order_id
FROM order_detail od
WHERE od.stock_code LIKE '0005-%' AND
NOT EXISTS (SELECT 1
FROM ORD_DETAIL od2
WHERE od2.order_id = od.order_id AND
od2.price_code LIKE 'PRC%'
);
Run Code Online (Sandbox Code Playgroud)
具体变化是:
stock_code位于外部查询中,而不是子查询中。NOT EXISTS而不是EXISTS——订单不应该有这样的行。LIKE不是NOT LIKE。