嗨我有2个表客户和customer_items。 现在第二个表中的两个表中都有一个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
答案 0 :(得分: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_ID
都不是唯一的,则DISTINCT
关键字只需要计算唯一记录。
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
答案 1 :(得分: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
答案 2 :(得分:1)
尝试此查询
SELECT
a.id
FROM
customer_items a
INNER JOIN
customer_items b
ON
a.id= b.id and
a.item = 'PILLOW' AND
b.item='blanket'
如果您想要客户名称,那么只需加入客户表。如果客户有多个枕头或毯子,请添加distinct
答案 3 :(得分:0)
选择 不同的customer_ID,item 从 customer_items 在''PILLOW','毯子'中的项目 GROUP BY customer_ID 有COUNT(项目)= 2