【问题标题】:Postgres: how to find rows having duplicate values in fieldsPostgres:如何在字段中查找具有重复值的行
【发布时间】:2020-08-29 07:18:12
【问题描述】:

我怎样才能找到任何值是否在一行中存在多次?一个例子:

 id | c1 | c2 | c3
----+----+----+----
  1 | a  | b  | c
  2 | a  | a  | b
  3 | b  | b  | b  

查询应该返回第 2 行和第 3 行,因为它们不止一次具有相同的值。我正在寻找的解决方案不是“其中 c1 = c2 或 c1 = c3 或 c2 = c3”,因为我需要测试的表中可以有任意数量的列。所有值都是文本,但可以是任意长度。

【问题讨论】:

    标签: postgresql duplicates


    【解决方案1】:

    一种方法是将列转换为行:

    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)
    

    Online example

    【讨论】:

      猜你喜欢
      • 2014-03-07
      • 2021-09-02
      • 2020-08-24
      • 2014-05-08
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 2019-05-01
      相关资源
      最近更新 更多