首页 > 数据库 > mysql教程 > 如何从Table2中选择记录,排除Table1中名称匹配的记录?

如何从Table2中选择记录,排除Table1中名称匹配的记录?

Susan Sarandon
发布: 2025-01-19 16:46:15
原创
589 人浏览过

How to Select Records from Table2 Excluding Those with Matching Names in Table1?

从一个表中选择排除另一个表的记录

问题:

给定两个表,table1 包含列 id 和 name,table2 包含列 id 和 name,检索 table2 中所有 name 值不在 table1 中的行。

建议查询(不正确):

<code class="language-sql">SELECT name
FROM table2
-- that are not in table1 already</code>
登录后复制

解决方案:

获得所需结果的更准确的查询是:

<code class="language-sql">SELECT t2.name
FROM table2 t2
LEFT JOIN table1 t1 ON t1.name = t2.name
WHERE t1.name IS NULL;</code>
登录后复制

解释:

此查询使用左连接将 table2 中的每一行与 table1 中基于 name 列的对应行匹配。如果在 table1 中找不到匹配的行,则结果中该行的 t1.name 值将为 NULL。通过仅选择 t1.name 为 NULL 的那些行,我们有效地排除了 table2 中在 table1 中具有匹配 name 值的记录。 或者,可以使用NOT EXISTS子句来实现相同的结果:

<code class="language-sql">SELECT name
FROM table2 t2
WHERE NOT EXISTS (
    SELECT 1
    FROM table1 t1
    WHERE t1.name = t2.name
);</code>
登录后复制

这个NOT EXISTS版本通常比LEFT JOIN版本效率更高,尤其是在大型数据集上。

以上是如何从Table2中选择记录,排除Table1中名称匹配的记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板