【问题标题】:MySQL Where IN Clause returns different resultMySQL Where IN 子句返回不同的结果
【发布时间】:2020-06-23 10:15:45
【问题描述】:

我是 MySQL 新手,我想了解 IN 子句的工作原理。

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

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

它工作并返回记录

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

它不起作用。

数据库中的列值:

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

描述: codeVARCHAR(100)

【问题讨论】:

    标签: mysql where-clause in-clause


    【解决方案1】:

    当字符串与数字比较时,字符串被转换为数字。所以这个:

    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,%'
    

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

    【讨论】:

      猜你喜欢
      • 2018-07-15
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2011-08-31
      • 2021-12-08
      相关资源
      最近更新 更多