ホームページ > データベース > mysql チュートリアル > 存在するかどうかではなく、結合を使用してmysqlで孤児行を削除する方法は?

存在するかどうかではなく、結合を使用してmysqlで孤児行を削除する方法は?

Mary-Kate Olsen
リリース: 2025-01-24 22:27:10
オリジナル
941 人が閲覧しました

How to Delete Orphan Rows in MySQL Using JOINs, NOT EXISTS, or NOT IN?

MySQL で孤立したレコードを効率的に削除する: 実証済みの 3 つの方法

このガイドでは、MySQL の孤立行 (共有 ID に基づく関連テーブル内の対応するレコードが欠落しているデータベース エントリ) を削除するための 3 つの効果的な手法を説明します。

方法 1: LEFT JOIN と IS NULL を利用する

このアプローチでは、LEFT JOIN を利用して、特定の ID 列に基づいて 2 つのテーブルのデータを結合します。 結合テーブルの ID 列の 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>
ログイン後にコピー

方法 2: 存在しない雇用

このメソッドは、NOT EXISTS を使用したサブクエリを使用して、関連テーブル内に一致するレコードの存在を確認します。一致しない行には削除のフラグが立てられます。

<code class="language-sql">DELETE FROM BLOB
WHERE NOT EXISTS (SELECT NULL
FROM FILES f
WHERE f.id = fileid);</code>
ログイン後にコピー

方法 3: NOT IN

を利用する

この単純なアプローチでは、NOT IN を使用して ID を直接比較します。 関連テーブルに存在しない ID を持つ行が特定され、削除されます。

<code class="language-sql">DELETE FROM BLOB
WHERE fileid NOT IN (SELECT f.id
FROM FILES f);</code>
ログイン後にコピー

重要な考慮事項:

データの整合性を確保するために、トランザクション内で常に DELETE ステートメントを実行します。 これにより、エラーや意図しない結果が発生した場合にロールバックが可能になります。 START TRANSACTION の前に DELETE を使用し、その後に COMMIT (または ROLLBACK) を使用します。

以上が存在するかどうかではなく、結合を使用してmysqlで孤児行を削除する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート