首頁 >資料庫 >mysql教程 >如何使用 LEFT JOIN、EXISTS 或 NOT IN 子查詢刪除 SQL 中的孤立行?

如何使用 LEFT JOIN、EXISTS 或 NOT IN 子查詢刪除 SQL 中的孤立行?

Linda Hamilton
Linda Hamilton原創
2025-01-24 22:35:13576瀏覽

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>

注意:如果可能,建議在事務中執行刪除操作,以便在出現任何意外問題時可以選擇回滾更改。

以上是如何使用 LEFT JOIN、EXISTS 或 NOT IN 子查詢刪除 SQL 中的孤立行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn