admin

在MySQL中使用IN子句的不同方法

sql

今天,我发布了这样一个查询的答案

SELECT * FROM table_name where column_name IN (val1,val2,...)

另一个用户已将答案发布到这样的查询中

SELECT * FROM table_name where val1 IN (column_name)

如您所见,column_name和值的位置互换了。

从Mysql Docs

expr IN(值,…)

如果expr等于IN列表中的任何值,则返回1;否则返回0。如果所有值都是常量,则根据expr的类型对它们进行求值并进行排序。然后使用二进制搜索完成对项目的搜索。这意味着如果IN值列表完全由常量组成,则IN非常快。

mysql> SELECT 2 IN (0,3,5,7);
-> 0

mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
-> 1

显然,上述(我的查询)是正确的。但以上两个查询都产生相同的输出。

另外,为什么不在 Mysql文档 中列出其他方法呢?

该问题是有关IN使用的规范信息源。其目的是提供详细的高质量答案,详细说明查询中IN的正确用法。


阅读 177

收藏
2021-05-10

共1个答案

admin

在下面使用此语句的简单说明中,

SELECT * FROM TableName WHERE column1 IN (1, 2, 3, 4)
-- versus
SELECT * FROM TableName WHERE 1 IN (column1, column2, column3, column4)

第一条语句仅涉及 一个与多个值 进行 比较的

SELECT  *
FROM   TableName
WHERE  column1 = 1 OR
       column1 = 2 OR
       column1 = 3 OR
       column1 = 4

而第二条语句是 一个值比较多列

SELECT  *
FROM   TableName
WHERE  column1 = 1 OR
       column2 = 1 OR
       column3 = 1 OR
       column4 = 1

这彼此有点不同。

2021-05-10