2011-10-04 63 views
2

是否有可能創建一個MySQL查詢像這樣:MySQL IN()與重複行?

SELECT id, name FROM products WHERE id IN (36, 36, 34, 2) 

因此,由於ID「36」包含了兩次,它產生的結果是產品的兩行?

即結果集可能是:

id name 
36 Cool Product 
36 Cool Product 
34 Lame Product 
2 Mediocre Product 

相反的:

​​

或者可能認爲這是一個 '量',如:

id name    qty 
36 Cool Product  2 
34 Lame Product  1 
2 Mediocre Product 1 

感謝幫助!

+0

爲什麼你需要連續兩次? – jerrymouse

+0

我想以某種方式迴應訂單摘要HTML表格,如果有人想要購買兩個'酷產品',它們在彙總表中列爲兩個獨立行項目(表格行)。 – Flight643

+0

可能的重複:http://stackoverflow.com/q/2259160/165154 –

回答

1

您可以添加2個結果要獲得聯盟所期望的結果的所有條款,例如:

SELECT id, name FROM products WHERE id IN (36) 
UNION ALL 
SELECT id, name FROM products WHERE id IN (36, 34, 2) 

,如果你想它,你可以使用COUNT和GROUP BY量,但如果你的ID指數獨特的(這應該如果是主鍵),你不會得到相同的產品

+3

聯盟所有的第一個查詢也許? –

+0

你是對的,編輯 –

2
SELECT id, name, COUNT(name) AS qty 
FROM products p 
WHERE p.id IN (36, 34, 2) 
GROUP BY id, name 

這就是說,這是假設你的產品表的兩個結果有重複的記錄,這似乎是錯誤的。

-1
SELECT id,name,count('id') as qty FROM products 
where id in (36,34,2) group by id 
+0

我不認爲這會做你想做的。您將「DISTINCT」與「GROUP BY」組合在一起,然後您還會獲得一個非聚合值(即名稱) – judda

0

您可以創建一個臨時表,並加入反對:

CREATE TEMPORARY TABLE checkout (id INTEGER NOT NULL) 

INSERT INTO checkout VALUES (36), (36), (34), (2) 

SELECT id, name FROM products NATURAL JOIN checkout 

您也可以用這種方法得到的數量列,如果你想:

SELECT id, name, COUNT(*) AS qty FROM products NATURAL JOIN checkout GROUP BY id 

中當然,在許多情況下,您仍然希望將用戶購買的產品的ID存儲在永久表中,在這種情況下,您不需要臨時表。