通过 SQL 选择

问题描述

我正在尝试创建包含六种特定产品的所有订单的列表。我正在使用的当前查询是:

    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