2013-05-30 141 views
0

嗨即時通訊有2個客戶和customer_items。 現在有在第二個表兩個表的CUSTOMER_ID每個客戶可以有多個項目,因此該表可以是這樣的MySql Select查詢合併結果

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 

回答

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關鍵字是需要計算的唯一記錄。由JW上述溶液的

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 
+0

是否有必要聲明?爲什麼? – rcpayan

+0

它正在計算用戶使用枕頭或毯子的行數。如果這是2(有檢查的結果),那麼該行被返回)。 – Kickstart

+0

實際上總項目大約是30(枚舉),每個客戶可以有1-4個通常 – Incognito

1

輕微變化: - 如果你想客戶名稱則剛剛加入的客戶表

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

+0

由於某種原因,這對我無效。 – Incognito

+0

你可以請張貼原因... – Meherzad

+0

這是可以適當的,因爲元素arent GROUP BY雖然我不知道這一點。 – Incognito

0

SELECT 不同CUSTOMER_ID,項 FROM customer_items WHERE在( '枕頭', '毯') GROUP BY CUSTOMER_ID HAVING COUNT(項目)= 2