我有点迷失了。这是我的查询:
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 |
---------------------
所以我有一个 ids 列表并希望接收产品的标题。理想情况下,甚至应该保留顺序。
最佳答案
我认为您对In
的概念有疑问
假设您有一个包含这些值的简单表格
id
--
1
2
3
4
5
如果你这样做
select id from simplyTable where id in (2,3,4,2,3,4)
你会得到
id
2
3
4
这是因为 where
中的 IN
语句是一个过滤器,决定显示或不显示一行。如果您输入重复的值,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)
关于mysql "where in"自动区分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12231740/