0

こんにちは、customers と customer_items の 2 つのテーブルがあります。2番目のテーブルの両方のテーブルにcustomer_idがあり、各顧客は複数のアイテムを持つことができるため、テーブルは次のようになります

id           |    item
----------------------------
1501         |    pillow
1501         |    blanket
1501         |    others
1502         |    pillow
1502         |    blanket
1502         |    others

枕と毛布の両方を持っている顧客をmysqlクエリで選択するにはどうすればよいですか

これが私の最後のアプローチです

select custlist.id FROM customers custlist LEFT JOIN customer_items custitems ON custitems.id=custlist.id WHERE (custitems.items='pillow' AND custitems.items='blanket') UNION ALL
4

4 に答える 4

1

JWによる上記のソリューションのわずかなバリエーション:-

SELECT  a.customer_ID
FROM    customers a
INNER JOIN (SELECT customer_ID, item FROM customer_items WHERE item = 'pillow' GROUP BY customer_ID) PillowCheck
ON a.customer_ID = PillowCheck.customer_ID
INNER JOIN (SELECT customer_ID, item FROM customer_items WHERE item = 'blanket' GROUP BY customer_ID) BlanketCheck
ON a.customer_ID = PillowCheck.customer_ID
于 2013-05-30T10:07:41.770 に答える
1

これはRelational Division問題です。

SELECT  a.customer_ID
FROM    customers a
        INNER JOIN customer_items b
            ON a.customer_ID = b.customer_ID
WHERE   b.item IN ('pillow', 'blanket')
GROUP   BY a.customer_ID
HAVING  COUNT(*) = 2

itemがすべての で一意でない場合customer_IDDISTINCTキーワードは一意のレコードのみをカウントする必要があります。

SELECT  a.customer_ID
FROM    customers a
        INNER JOIN customer_items b
            ON a.customer_ID = b.customer_ID
WHERE   b.item IN ('pillow', 'blanket')
GROUP   BY a.customer_ID
HAVING  COUNT(DISTINCT b.item) = 2
于 2013-05-30T10:00:52.840 に答える
0

個別の customer_ID を選択し、item FROM customer_items WHERE item in ('PILLOW', 'blanket') GROUP BY customer_ID HAVING COUNT(item) = 2

于 2013-05-30T10:47:20.690 に答える