今天,我发布了这样一个查询的答案
SELECT * FROM table_name where column_name IN (val1,val2,...)
另一个用户已将答案发布到这样的查询中
SELECT * FROM table_name where val1 IN (column_name)
如您所见,column_name和值的位置互换了。
expr IN(值,…) 如果expr等于IN列表中的任何值,则返回1;否则返回0。如果所有值都是常量,则根据expr的类型对它们进行求值并进行排序。然后使用二进制搜索完成对项目的搜索。这意味着如果IN值列表完全由常量组成,则IN非常快。
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的正确用法。
在下面使用此语句的简单说明中,
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
这彼此有点不同。