MySQL Where IN Clause returns 不同的结果
MySQL Where IN Clause returns different result
我是 MySQL 的新手,我想了解 IN 子句的工作原理。
在 MySQL 中,当我尝试这样使用 in 子句时:
Select *
From `table`
WHERE `code` IN (1,2)
有效并且returns记录
Select *
From `table`
WHERE `code` IN (3)
没用。
数据库中的列值:
-----------------
| `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,%'
但正确的解决方案是将逗号分隔值存储为单独的行。
我是 MySQL 的新手,我想了解 IN 子句的工作原理。
在 MySQL 中,当我尝试这样使用 in 子句时:
Select *
From `table`
WHERE `code` IN (1,2)
有效并且returns记录
Select *
From `table`
WHERE `code` IN (3)
没用。
数据库中的列值:
-----------------
| `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,%'
但正确的解决方案是将逗号分隔值存储为单独的行。