MySQL WHERE IN 查询多个匹配值
尝试使用 WHERE IN () 子句从 MySQL 表中检索数据进行匹配如果有多个值,您可能会遇到不返回具有多个匹配值的行的问题。此行为可能会令人困惑,因为您可能期望返回具有任何指定值的所有行。
说明
WHERE IN () 子句用于根据指定的列值是否与括号内提供的任何值匹配来选择行。但是,当一行有多个匹配值(例如 1 和 3)时,查询将转换为一系列 OR 条件:
<code class="sql">SELECT * FROM table WHERE id='1' OR id='2' OR id='3' OR id='4';</code>
这意味着只有与其中一个指定值完全匹配的行才会被查询。
解决方案
要解决这个问题,可以考虑以下方法:
方法一:使用SET数据类型
将 id 列的数据类型更改为 SET 可以让您在一行中存储多个值。然后,您可以使用 FIND_IN_SET() 函数查询包含特定值的行:
<code class="sql">SELECT * FROM table WHERE FIND_IN_SET('1', id);</code>
此查询将返回 id 列包含值“1”的所有行,无论是否存在其他值
方法 2:使用 UNION 或子查询
另一种方法是使用 UNION 或子查询来组合多个查询,每个查询都匹配指定值之一:
<code class="sql">SELECT * FROM table WHERE id = 1 UNION SELECT * FROM table WHERE id = 3;</code>
此查询将返回与 1 或 3 匹配的所有行,无论是否存在其他值。
以上是为什么我的 MySQL WHERE IN 查询会丢失具有多个匹配值的行?的详细内容。更多信息请关注PHP中文网其他相关文章!