问题描述
我正在尝试创建包含六种特定产品的所有订单的列表。我正在使用的当前查询是:
SELECT o.order_date,o.price AS revenue,o.cost,f.id AS fileid,o.id AS orderid,o.fk_order_status_id,o.date_started,o.date_completed,p.description AS product,pp.description AS subproduct
FROM orders o
JOIN file f
f.id = o.fk_file_id
JOIN product p
ON p.id = o.fk_product_id
JOIN product_product pp
ON pp.fk_product_id = o.fk_product_id
WHERE o.fk_product_id IN ('66','8','6','21','11')
这会提取包含任何这些产品的所有订单。我需要缩小结果的范围是包含这些产品的订单,而不仅仅是一两个产品。我们正在尝试获取我们最近实施的工作流程的计数
解决方法
您可以使用聚合和having
:
SELECT o.order_date,o.price AS revenue,o.cost,o.id AS orderid,o.fk_order_status_id,o.date_started,o.date_completed
FROM orders o JOIN
file f
ON f.id = o.fk_file_id JOIN
product p
ON p.id = o.fk_product_id JOIn
product_product pp
ON pp.fk_product_id = o.fk_product_id
WHERE o.fk_product_id IN (66,8,6,21,11)
GROUP BY o.order_date,o.price,o.id,o.date_completed
HAVING COUNT(DISTINCT o.fk_product_id) = 5; -- number of products in the list