是否可以像这样创建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
感谢您的帮助!
答案 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