如果X而不是Y,SQL查询将从表中返回所有内容

Dev*_*Wol 6 sql sql-server

我有一个包含订单详细信息的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也是唯一的:/

Gor*_*off 4

我们可以以您的尝试为基础:

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)

具体变化是:

  • on 的条件stock_code位于外部查询中,而不是子查询中。
  • 价格代码的条件是NOT EXISTS而不是EXISTS——订单不应该有这样的行。
  • 子查询中的条件LIKE不是NOT LIKE