首页  >  文章  >  数据库  >  为什么我的 MySQL WHERE IN 查询会丢失具有多个匹配值的行?

为什么我的 MySQL WHERE IN 查询会丢失具有多个匹配值的行?

Barbara Streisand
Barbara Streisand原创
2024-11-05 20:29:02402浏览

Why Does My MySQL WHERE IN Query Miss Rows with Multiple Matching Values?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn