当我运行此代码时,它会按预期返回具有列出的 id 的所有网站
SELECT * FROM `sites` WHERE id IN (142,150,40,42,21,99,162,110,121)
但是这仅返回 id 为 142 的站点。为什么这甚至会返回一些东西?我本来预计会出现错误。
SELECT * FROM `sites` WHERE id IN ("142,150,40,42,21,99,162,110,121")
最佳答案
MySql(正确地)不会查看字符串内部以查看它是否包含看起来像 in 列表的内容。
它只看到一个 in
列表,其中包含一个字符串项目。您可以通过从 string
到 int
的隐式转换来转换该单个表达式。
但不是做明智的事情并引发错误,因为字符串 "142,150,40,42,21,99,162,110,121"
不是远程有效的整数,而是在第一个非数字字符处停止,并且所以字符串转换为 142
。
因此您的查询将被评估为in (142)
关于mysql - IN 函数的奇怪结果,id 列表在引号中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37006902/