Postgresql Postgres:如何查找字段中具有重复值的行
如何查找任何值在一行中是否存在多次?例如:Postgresql Postgres:如何查找字段中具有重复值的行,postgresql,duplicates,Postgresql,Duplicates,如何查找任何值在一行中是否存在多次?例如: id | c1 | c2 | c3 ----+----+----+---- 1 | a | b | c 2 | a | a | b 3 | b | b | b 查询应该返回第2行和第3行,因为它们多次具有相同的值。我寻找的解决方案不是“其中c1=c2或c1=c3或c2=c3”,因为我需要测试的表中可能有任意数量的列。所有值都是文本,但可以是任意长度。一种方法是将列转换为行: select * from the_table
id | c1 | c2 | c3
----+----+----+----
1 | a | b | c
2 | a | a | b
3 | b | b | b
查询应该返回第2行和第3行,因为它们多次具有相同的值。我寻找的解决方案不是“其中c1=c2或c1=c3或c2=c3”,因为我需要测试的表中可能有任意数量的列。所有值都是文本,但可以是任意长度。一种方法是将列转换为行:
select *
from the_table tt
where exists (select 1
from ( values (c1), (c2), (c3) ) as t(v)
group by v
having count(*) > 1)
如果您想要一个不必列出每一列的动态解决方案,可以通过将行转换为JSON值来实现:
select *
from the_table tt
where exists (select 1
from jsonb_each_text(to_jsonb(tt)) as j(k,v)
group by v
having count(*) > 1)