mysql "where in"自动区分?

标签 mysql where-clause

我有点迷失了。这是我的查询:

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/

相关文章:

php - 重复的 SQL 错误 : 2006: MySQL server has gone away

Mysql连接不同的表

mysql - 加入查询 laravel 4.2 的 Where 子句

sql - 如何在Sqlite中实现Eclipse样式的搜索

mysql - 如何连接 Oracle 中的三个表,其中一个表的外键列中有空值?

mysql - 如何使用本地MAMP访问远程服务器

java - Java 中的 Where 子句

sql - IP 地址或 inet 类型的 Postgres "is not contained by"运算符

c# - LINQ WHERE 语句/忽略条件

mysql - 将 REGEXP_REPLACE 替换为 DISTINCT