に我々は電子メール上記の場合削除クエリ
SELECT email, COUNT(email)
FROM users
GROUP BY email
HAVING (COUNT(email) > 1)
の複製を返し、次のSQLクエリを持っているとしましょう「を持つ」を使用しながら、どのように我々は、実際にそれらの重複行を削除することができますか?または重複のいずれか1つのみが重複しないようにしますか?
に我々は電子メール上記の場合削除クエリ
SELECT email, COUNT(email)
FROM users
GROUP BY email
HAVING (COUNT(email) > 1)
の複製を返し、次のSQLクエリを持っているとしましょう「を持つ」を使用しながら、どのように我々は、実際にそれらの重複行を削除することができますか?または重複のいずれか1つのみが重複しないようにしますか?
一つの方法はctid
使用:
delete from users
where ctid not in (select min(ctid)
from users
group by email
);
これは、各電子メールの全てが、1つの行を削除します。 ctid
は内部行識別子です。ユーザー定義の主キー列を使用する方がよいでしょう。
* 'ユーザーから削除する ' – JNevill
@Abelisto。 。 。私はそれがどうやって行うのか分かりません。 @Abelisto。 –
。 。これにより、すべての行が電子メールごとに1つずつ削除されます。 –
この方法では、主キーまたは一意の識別子がなくても、テーブルからレコードを削除できます。
WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY email ORDER BY email) AS RN
FROM users
)
DELETE FROM CTE WHERE RN > 1
あなたの主キーが 'ユーザ 'であると仮定すると、あなたはどの2人のユーザを削除したいでしょうか? – JNevill
[重複するエントリを削除するには?](http://stackoverflow.com/questions/1746213/how-to-delete-duplicate-entries) –