0

我有点失落。这是我的查询:

SELECT id, title FROM products WHERE id IN (4,2,6,4,2);

查询将只产生 3 条记录。

如何获取所有 5 条记录(在这种情况下,我确实想查看重复项)。

非常感谢。

更新: 抱歉不够准确。感谢您的评论,确实我没有正确理解“IN”。

这是我的数据:

---------------------
|  id |  title      |
---------------------
|  2  |  product_2  |
---------------------
|  4  |  product_4  |
---------------------
|  6  |  product_6  |
---------------------

我的意图是接收以下数据,因为我有一个 id 列表:

---------------------
|  id |  title      |
---------------------
|  4  |  product_4  |
---------------------
|  2  |  product_2  |
---------------------
|  6  |  product_6  |
---------------------
|  4  |  product_4  |
---------------------
|  2  |  product_2  |
---------------------

所以我有一个 id 列表并希望收到产品的标题。理想情况下,甚至应该保留订单。

4

2 回答 2

2

我觉得你的概念有问题In

假设您有一个包含此值的简单表

id
--
1
2
3
4
5

如果你这样做

select id from simplyTable where id in (2,3,4,2,3,4)

你会得到

id
2
3
4

那是因为IN语句 inwhere是一个过滤器,决定显示或不显示一行。如果您输入重复值,SQL 将忽略它,因为当找到第一个值并检查匹配时,它将显示该行,并且不会继续检查其他值所以,您需要为每个数字输入一次时间,如果你把它重复,它不会显示更多次。

如果您需要重复某些值,一种方法是使用UNION ALL

select id from simplyTable where id in (2,3,4)
union all
select id from simplyTable where id in (2,3,4)

这将返回您:

id
2
3
4
2
3
4

不要UNION 只使用,因为它会应用一个不同的,并且每个值只会返回一次。 UNION将让您显示重复的值,因为您在一个结果中显示查询的结果,我认为这就是您所期望的。

在这种情况下,您的查询将是:

SELECT id, title FROM products WHERE id IN (4,2,6);
UNION ALL
SELECT id, title FROM products WHERE id IN (4,2)
于 2012-09-01T22:02:01.917 回答
1

加入临时表

SqlFiddle

DROP   TABLE IF EXISTS num;
CREATE TABLE num (i INT);    
INSERT INTO  num (i) VALUES (4),(2),(6),(4),(2);

SELECT id, title
FROM   num, products
WHERE  id = i;

灵感来自另一个答案

于 2012-09-02T01:33:18.460 回答