MySQL Where IN子句返回不同的结果



我是MySQL的新手,我想了解in子句是如何工作的。

在MySQL中,当我尝试使用In子句时:

Select *
From `table`
WHERE `code` IN (1,2)

它工作并返回记录

Select *
From `table`
WHERE `code` IN (3)

它不起作用。

DB中的列值:

-----------------
|    `code`     |
|    1,3,2      |
-----------------

描述:codeVARCHAR(100(

将字符串与数字进行比较时,字符串将转换为数字。所以这个:

SELECT '1,3,2' IN (1, 2) -- true

将强制MySQL将1,3,2转换为1;它解析1并忽略逗号后的所有内容。您可以通过重新排列值来确认此行为,它将不再匹配:

SELECT '3,1,2' IN (1, 2) -- false

一个棘手的解决方案是这样做:

WHERE CONCAT(',', code, ',') LIKE '%,1,%'
OR CONCAT(',', code, ',') LIKE '%,2,%'

但正确的解决方案是将逗号分隔的值存储为单独的行。

相关内容

  • 没有找到相关文章

最新更新