MySQL IN()有重复的行吗?

时间:2011-10-04 12:36:48

标签: php mysql

是否可以像这样创建MySQL查询:

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
36    Cool Product
34    Lame Product
 2    Mediocre Product

或者可能将其视为“数量”,例如:

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

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

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

那就是说,假设你的产品表有重复记录似乎是错误的。

答案 1 :(得分:1)

你可以添加2个结果使用union all子句获得所需的结果,例如:

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索引是唯一的(它应该是主键)你将不会得到同一产品的两个结果

答案 2 :(得分: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存储在永久表中,在这种情况下,您不需要临时表。

答案 3 :(得分:-1)

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