【问题标题】:SQL Query to find duplicate data across columnsSQL查询跨列查找重复数据
【发布时间】:2016-06-03 02:12:21
【问题描述】:

我正在尝试查询 DB2 表以跨列查找重复项。更具体地说,我正在寻找存在重复列但不一定跨相同列名的行。

示例。

Graph_Table有四列坐标

第 1 行

Column1 = -1
Column2 = -4
column3 = 6
column4 = 3

第 7 行

Column1 = 3
Column2 = -1
Column3 = 6
Column4 = -4

查询会将其计为重复项或将结果集作为重复项返回,因为坐标相同但不是来自同一列。我研究了几个查询,但它们都使用序数行/值进行比较。

【问题讨论】:

    标签: sql find db2 duplicates row


    【解决方案1】:

    DB2 支持laterallistagg()。因此,我认为您可以这样做:

    select gt.*
    from (select gt.*, count(*) over (partition by v.cols) as cnt
          from graph_table gt, lateral
               (select listagg(col, ',') within group (order by col) as cols
                from (values (gt.column1), (gt.column2), (gt.column3), (gt.column4)
                     ) v(col)
               ) v
         ) gt
    where cnt >= 2;
    

    【讨论】:

    • 你对所有 sql 语言的掌握让我非常惊讶。
    • 你是真的花时间学习了所有的 SQL 语言,还是像 Matrix 中的 Neo 一样…… :)
    • @FelixPamittan 。 . .它们并没有那么不同。具有讽刺意味的是,例如,上面的查询应该在 Postgres 中工作。
    • 这很完美;是的。 SQLITE3 是否有等价物?
    • @KevinMcFadden 。 . .唉,没有。 SQLite 不允许在group_concat() 中进行排序,这会抛出这个逻辑。需要一种完全不同的方法。
    猜你喜欢
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多