找出该订单,但不包含某些商品!只要有不符合的订单就不显示?

假设数据表关系:

order 订单数据表:

order_id / public_order_id

1 / AAA
2 / BBB
3 / CCC

prod 商品数据表:

order_id / prod_id

1 / 100
1 / 101
1 / 102
2 / 101
2 / 103
3 / 102
3 / 104

前端显示

AAA
BBB
CCC

当我要排除有某 prod_id 的订单不显示
假设我要排除假设该订单有 prod_id 100 得不显示

前端就会排除 AAA 剩下:

BBB
CCC

若追加 prod_id 101
则会只剩下 CCC (因为 AAA 跟 BBB 都有包含 100, 101)

CCC

这我能怎么做判断?

SELECT
       r.public_order_id,
      FROM `order` as r
      JOIN `prod` as p ON p.order_id = r.order_id
      WHERE p.prod_id != 100
      AND p.prod_id != 101
      // GROUP BY r.public_order_id

我发现如果不 GROUP BY public_order_id 的话,
假设该订单 prod_id 有多少,就会重复多少个 public_order_id
但是我如果 GROUP BY public_order_id ,
他就会把全部 AAA,BBB,CCC 都印出,但其实每个订单 prod_id 是多个,而且都有包含我不要的 100, 101
...所以这样会出问题!


我想实现的是
当该订单中有一笔有我不要的 prod_id 则那笔就不显示
现在的情况是虽然该笔有我不要的 prod_id ,但还有其他不是这个 prod_id 的商品,所以他就又显示出来


補充

數據庫結構:

clipboard.png

SQL語句

SELECT

    r.status,
    uo.add_time,
    r.public_order_id,
    uo.order_id,
    u.name as uname,
    ss.prod_id
  FROM `user_order` as uo
  JOIN `order_record` as r ON r.order_id = uo.order_id
  JOIN `user` as u ON u.id = r.id
  JOIN `stock` as ss ON ss.order_id = r.order_id
  AND (ss.prod_id = 115
  or ss.prod_id = 120)
  WHERE r.status = '待處理'
  AND ss.prod_id is null
阅读 2.7k
4 个回答

这个试下

SELECT r.public_order_id
  FROM `order` as r
  LEFT JOIN `prod` as p ON p.order_id = r.order_id and (p.prod_id = 100 or p.prod_id = 101)
 WHERE p.prod_id is null


clipboard.png

clipboard.png

clipboard.png

SELECT r.public_order_id,
    FROM `prod ` as p
        JOIN `order` as r ON p.order_id = r.order_id
    WHERE p.prod_id NOT IN (100,101)
    GROUP BY r.public_order_id

你可以先看看join后的结果,就知道问题所在了
不过可以这样查
select public_order_id from order_d

where order_d.order_id not in(
    select order_id from prod
    where prod.prod_id = "100" or prod.prod_id = "101"
);

试一下

select o.public_order_id from order o where not exists (select p.order_id from prod p where (p.prod_id=100 or p.prod_id=101) and p.order_id=o.order_id group by p.order_id)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题