MySql Select查询组合结果

时间:2013-05-30 09:57:30

标签: mysql

嗨我有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

4 个答案:

答案 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