我有两个表:ProductOrder和ProductOrderStatusHistory。
每个ProductOrder记录都有许多状态历史记录。
每个ProductOrderStatusHistory记录都具有与。
关联的状态和产品订单我正在循环查看产品订单,我想忽略任何分配了特定状态的订单。这是我到目前为止所做的:
SELECT po.id FROM product_order as po
INNER JOIN product_order_status_history posh ON posh.product_order = po.id
AND posh.order_status <> 5
我的问题是,当我遇到特定状态时,我不知道如何过滤掉整个产品订单。
例如:
po | posh status
--------+------------
126024 | 11
126024 | 5
140582 | 6
140582 | 10
如果我想忽略的状态是5,那么产品订单126024将不会包含在查询结果中。
非常感谢任何帮助!
答案 0 :(得分:1)
尝试将状态条件移动到查询部分
SELECT po.id FROM product_order as po
INNER JOIN product_order_status_history posh ON posh.product_order = po.id WHERE posh.order_status <> 5
这应该通过连接表属性过滤您的查询结果。
答案 1 :(得分:0)
尝试NOT EXIST
子句:
SELECT po.id FROM product_order as po
WHERE NOT EXISTS(
SELECT 0 FROM product_order_status_history posh
WHERE posh.product_order = po.id
AND posh.order_status = 5
)
下面是一个连接两个表的版本,但跳过整个产品:
SELECT po.id FROM product_order as po
INNER JOIN product_order_status_history posh ON posh.product_order = po.id
WHERE NOT EXISTS(
SELECT 0 FROM product_order_status_history posh1
WHERE posh1.product_order = po.id
AND posh1.order_status = 5
)