我有三个表,分别是orders、products和orderproducts,其中products表中有一个status字段表示产品处于活动或非活动状态。只有在所有产品都有效的情况下,我才能显示订单。这意味着如果我有两个产品的订单,而其中一个产品处于非活动状态,我必须跳过显示该行。
考虑以下示例(产品表中的status-1 active,2-inactive)。
订单
+-------------------+
|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 |
我试着加入那些没用的table。非常感谢您的帮助。
谢谢
3条答案
按热度按时间6ovsh4lw1#
你可以用
join
,group by
,和having
. 我假设状态为1表示产品处于活动状态。所以:请注意
orders
不需要表,因为订单id在orderproducts
.你也许能写出
having
作为:这假设“活动”状态是可用的最低值。
fv2wmkja2#
您可以找到至少有一个非活动产品的订单ID,并将其从订单列表中排除
yc0p9oo03#
假设
status = 1
表示活动。中的内部联接表
order
至orderproducts
至products
使用适当的关系。那么,
group by
上order_id
,并过滤掉这些命令having
Max()
状态值等于1。请尝试以下操作: