gpt4 book ai didi

如果连接表中的其中一行不匹配条件,则 Mysql 将排除整行

转载 作者:行者123 更新时间:2023-11-29 05:03:42 24 4
gpt4 key购买 nike

我有三个表,分别是订单、产品和订单产品,其中产品表中有一个状态字段来表示产品是事件的还是非事件的。仅当所有产品都处于事件状态时,我才必须显示订单。这意味着如果我有一个包含两种产品的订单并且其中一种产品处于非事件状态,我必须跳过显示该行。

考虑以下示例(状态 - 1 活跃,2 - 产品表中的非活跃)。

订单

+-------------------+
|order_id | column_1|
| 1 | Value 1 |
| 2 | Value 2 |
| 3 | Value 3 |

订购产品

+---------------------+
|id | p_id | order_id |
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 1 | 2 |
| 4 | 1 | 3 |

产品

+---------------------+
|id | name | status |
| 1 | Prod 1 | 1 |
| 3 | Prod 2 | 2 |

期望的输出

+------------+
| order_id |
| 2 |
| 3 |

我尝试加入没有帮助的表格。非常感谢任何帮助。

谢谢

最佳答案

  • 假设 status = 1 表示活跃。
  • 使用适当的关系从 orderorderproductsproducts 内部连接表。
  • 然后,对order_id进行分组,过滤掉那些具有Max()值的订单状态等于 1。

尝试以下操作:

SELECT o.order_id 
FROM orders AS o
JOIN orderproducts AS op ON op.order_id = o.order_id
JOIN products AS p ON p.product_id = op.product_id
GROUP BY o.order_id
HAVING MAX(p.status) = 1

关于如果连接表中的其中一行不匹配条件,则 Mysql 将排除整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52664497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com