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

发布于 2022-09-11 15:06:10 字数 1635 浏览 15 评论 0

假设数据表关系:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

2022-09-18 15:06:10

试一下

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)
浮世清欢 2022-09-18 15:06:10

你可以先看看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"
);
逆光下的微笑 2022-09-18 15:06:10
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
◇流星雨 2022-09-18 15:06:10

这个试下

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文