-3

選択クエリのヘルプが必要です。請求書の項目を格納する DB があります。そのため、請求書には複数の項目を含めることができます。

ID 請求書 ID 商品 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 行のみを返す必要があります。これは、invoice # 123 には、他の製品に関係なく、製品 1、2、3 があるためです。

ID 請求書 ID 商品 ID
1 123 1
2 123 2
3 123 3
4 123 5
4

2 に答える 2

4

invoice_ids製品 1、2、および 3 を持つすべてを返したい場合は、次のような 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 句を追加すると、別のフィルターを追加して、製品 ID の個別の数が 3 より大きい行を返すことができます。

すべての詳細を返したい場合は、次のクエリを使用して結果を取得できます。

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);

デモで SQL Fiddle を参照してください

于 2013-08-29T20:15:36.127 に答える
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)
于 2013-08-29T20:23:12.570 に答える