查看oracle中重复行的所有数据

Mar*_*arc 8 oracle select duplicates

我有一个有6列的表:

  • id
  • name
  • type_id
  • code
  • lat
  • long

前三个是必需的. ID是私钥,自动插入序列.

我有一些重复的行,由BOTH定义name并且type_id相等,但我想查看欺骗的所有数据.我可以简单地找到傻瓜:

SELECT   name 
       , type_id
FROM   table1
GROUP BY name 
         , type_id
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)

但实际上查看所有信息让我感到困惑.我知道这应该很简单,但我在这里打了一堵墙.

Jus*_*ave 15

您始终可以在IN子句中使用GROUP BY/ HAVINGquery.这是有效的并且相对简单,但如果重复行的数量相对较大,则可能不是特别有效.

SELECT *
  FROM table1
 WHERE (name, type_id) IN (SELECT name, type_id
                             FROM table1
                            GROUP BY name, type_id
                           HAVING COUNT(*) > 1)
Run Code Online (Sandbox Code Playgroud)

使用分析函数通常会更有效,以避免第二次碰到表.

SELECT *
  FROM (SELECT id, 
               name,
               type_id,
               code,
               lat,
               long,
               count(*) over (partition by name, type_id) cnt
          FROM table1)
 WHERE cnt > 1
Run Code Online (Sandbox Code Playgroud)

根据您计划对数据执行的操作以及可能存在的特定行的重复次数,您还可能希望加入table1自身以将数据放入单行中

SELECT a.name,
       a.type_id,
       a.id,
       b.id,
       a.code,
       b.code,
       a.lat,
       b.lat,
       a.long,
       b.long
  FROM table1 a
       JOIN table1 b ON (a.name = b.name AND
                         a.type_id = b.type_id AND
                         a.rowid > b.rowid)
Run Code Online (Sandbox Code Playgroud)