需要有关精选查询的帮助。我有一个存储发票项目的数据库。因此发票可以有多个项目。
id invoice_id product_id 1 123 1 2 123 2 3 123 3 4 123 5 5 124 1 6 124 2
我需要的是一个返回所有product_id等于1,2,3的发票的查询。 这意味着如果发票123有产品1,2,3和5也返回它,但它必须包含至少1,2,3
所以查询应该只返回前4行,因为发票#123有产品1,2,3,不管它可能有什么产品
id invoice_id product_id 1 123 1 2 123 2 3 123 3 4 123 5
答案 0 :(得分:4)
如果要返回包含产品1,2和3的所有invoice_ids
,那么您需要查看使用类似于以下内容的HAVING子句:
select invoice_id
from yourtable
where product_id in (1, 2, 3)
group by invoice_id
having count(distinct product_id) >= 3
使用WHERE子句过滤器,您可以返回带有您需要的product_id的那些(1,2,3),但随后添加一个HAVING子句,您将添加另一个过滤器,以返回具有大于3的产品ID的独特计数的那些行
如果您想要返回所有细节,可以使用以下查询来获得结果:
select id, invoice_id, product_id
from yourtable
where invoice_id in (select invoice_id
from yourtable
where product_id in (1, 2, 3)
group by invoice_id
having count(distinct product_id) >= 3);
答案 1 :(得分:0)
使用子查询选择包含您感兴趣的产品的发票ID,然后使用此结果选择相同的发票ID以及与这些ID相关联的所有产品:
SELECT id, invoice_id, productid
FROM invoices
WHERE invoice_id IN (SELECT invoice_id
FROM invoices
WHERE product_id IN (1, 2, 3)
GROUP BY invoice_id)