与特定产品的mysql订单

问题描述:

我有3个订单,orders_products和产品。我也加入其中,以获得产品的每个订单..与特定产品的mysql订单

SELECT o.orders_id, p.products_id, p.item_type 
from orders o 
join orders_products op on o.orders_id = op.orders_id 
join products p on op.products_id = p.products_id 

现在我只想拿到订单,只有具有p.item_type = 1或p.item_type = 2(如果订单类型的产品1,2和3,不显示,只有产品类型1或2的订单)

如果您只想订购,可以使用group byhaving。下面得到与项目1和2,没有其他的命令:

select op.orders_id 
from orders_products op join 
    products p 
    on op.products_id = p.products_id 
group by op.orders_id 
having sum(p.item_type = 1) > 0 and 
     sum(p.item_type = 2) > 0 and 
     sum(p.item_type not in (1, 2)) = 0; 

注意,不需要orders表。

可以使用此having子句1或2且无其它:

having sum(p.item_type in (1, 2) > 0 and 
     sum(p.item_type not in (1, 2)) = 0; 
+0

感谢,不应该是总和(p.item_type = 1)> 0或 总和(p.item_type = 2)既然我们想要,因为我们希望订购类型1和/或2,而不是两者都必需? – david

+0

非常感谢 – david

+0

@David。 。 。有没有理由不接受这个答案?我注意到你没有接受任何其他答案。 –