首页 > 数据库 > mysql教程 > 如何使用左联接,存在或不在子查询中删除SQL中的孤儿行?

如何使用左联接,存在或不在子查询中删除SQL中的孤儿行?

Linda Hamilton
发布: 2025-01-24 22:35:13
原创
562 人浏览过

How to Delete Orphan Rows in SQL Using LEFT JOIN, EXISTS, or NOT IN Subqueries?

使用 SQL 删除没有匹配项的行

在关系数据库中处理多个表时,有时需要识别并删除一个表中在另一个表中没有对应匹配项的行。此过程通常称为“删除孤立条目”。

考虑以下场景:

  • 您有两个表,“files”和“blob”,其中“files.id”可用于与“blob.fileid”连接。
  • 您的目标是删除“blob”表中在“files”表中没有匹配“id”值的所有行。

为此,您可以使用各种 SQL 方法:

使用 LEFT JOIN 和 IS NULL

<code class="language-sql">DELETE b FROM BLOB b
LEFT JOIN FILES f ON f.id = b.fileid
WHERE f.id IS NULL</code>
登录后复制

使用 EXISTS 子查询

<code class="language-sql">DELETE FROM BLOB
WHERE NOT EXISTS(SELECT NULL
                    FROM FILES f
                   WHERE f.id = fileid)</code>
登录后复制

使用 NOT IN 子查询

<code class="language-sql">DELETE FROM BLOB
WHERE fileid NOT IN (SELECT f.id
                        FROM FILES f)</code>
登录后复制

注意:如果可能,建议在事务中执行删除操作,以便在出现任何意外问题时可以选择回滚更改。

以上是如何使用左联接,存在或不在子查询中删除SQL中的孤儿行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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