我是MySQL的新手,我想了解in子句是如何工作的。
在MySQL中,当我尝试使用In子句时:
Select *
From `table`
WHERE `code` IN (1,2)
它工作并返回记录
Select *
From `table`
WHERE `code` IN (3)
它不起作用。
DB中的列值:
-----------------
| `code` |
| 1,3,2 |
-----------------
描述:code
VARCHAR(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,%'
但正确的解决方案是将逗号分隔的值存储为单独的行。