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

Barbara Streisand
发布: 2024-11-05 20:29:02
原创
423 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!