2011-10-04 64 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存储在永久表中,在这种情况下,您不需要临时表。