1. ホーム
  2. sql

[解決済み】PostgreSQLで重複するレコードを検索する方法

2022-04-15 04:19:05

質問

PostgreSQLのuser_links"というテーブルがあり、現在以下のフィールドの重複が可能です。

year, user_id, sid, cid

現在、一意制約は最初のフィールドである "id" になっていますが、この制約を追加して year , user_id , sidcid はすべて一意ですが、重複する値がすでに存在し、この制約に違反しているため、制約を適用できません。

重複しているものをすべて見つける方法はありますか?

解決方法は?

基本的な考え方は、回数集計を伴うネストされたクエリを使用することである。

select * from yourTable ou
where (select count(*) from yourTable inr
where inr.sid = ou.sid) > 1

内側のクエリのwhere節を調整することで、検索を絞り込むことができます。


コメントで紹介されている別の良い解決策があります(ただし、全員が読んでいるわけではありません)。

select Column1, Column2, count(*)
from yourTable
group by Column1, Column2
HAVING count(*) > 1

もっと短くてもいい。

SELECT (yourTable.*)::text, count(*)
FROM yourTable
GROUP BY yourTable.*
HAVING count(*) > 1