一意でない ID を削除するための MySQL クエリの修正
提供されたクエリは MySQL 5.0 では機能しません。この記事では、この問題に対処し、MySQL で一意でない ID を持つ行を削除するための代替ソリューションを提供します。
元の問題:
DELETE FROM posts WHERE>
説明:
このクエリは、「id」が一致する行を「posts」テーブルから削除しようとします。テーブル内に複数回出現する行の「id」。ただし、MySQL 5.0 では、DELETE ステートメントの条件としてサブクエリを使用することはできません。
解決策:
1. IN 句の使用:
「=」を使用する代わりに、条件を「IN」に変更して、「id」をサブクエリの結果セットと比較します。
DELETE FROM posts WHERE id IN ( SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) )
2. SELECT クエリと DELETE クエリを分離する:
サブクエリ (SELECT ステートメント) を DELETE ステートメントから分離し、それらを順番に実行します。
SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) INTO @duplicate_ids; DELETE FROM posts WHERE id IN (@duplicate_ids);
3.エイリアスを使用したネストされたサブクエリ:
サブクエリをネストし、DELETE ステートメントで使用される結果にエイリアスを付けます。
DELETE FROM posts WHERE id IN ( SELECT * FROM ( SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) ) AS p )
4. JOIN の使用:
JOIN を使用して、テーブルの「id」をサブクエリの結果セットと比較します。
DELETE a.id FROM posts AS a JOIN ( SELECT id, COUNT(*) AS num FROM posts GROUP BY id HAVING num > 1 ) AS b ON a.id = b.id
以上がMySQL 5.0 で一意でない ID を持つ行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。