現在、次の重複フィールドが許可されている「user_links」という PostgreSQL データベース テーブルがあります。
year, user_id, sid, cid
一意の制約は現在、「id」と呼ばれる最初のフィールドですが、、、がすべて一意であるyear
ことを確認するための制約を追加しようとしていますがuser_id
、この制約に違反する重複値がすでに存在するため、制約を適用できません。sid
cid
すべての重複を見つける方法はありますか?
ベストアンサー1
基本的な考え方は、カウント集計を伴うネストされたクエリを使用することです。
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