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

时间:2012-01-03 20:53:42

标签: oracle select duplicates

我有一个包含6列的表格:

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

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

我有一些重复的行,正如nametype_id相同所定义,但我想查看欺骗的所有数据。我可以简单地找到这些傻瓜:

SELECT   name 
       , type_id
FROM   table1
GROUP BY name 
         , type_id
HAVING COUNT(*) > 1

但实际上查看所有信息让我感到困惑。我知道这应该很简单,但我在这里碰壁。

4 个答案:

答案 0 :(得分:1)

SELECT * 
FROM   table1 t1 
WHERE  (t1.name,t1.type_id) in ( SELECT DISTINCT name
                                               , type_id
                                 FROM     table1
                                 GROUP BY name, type_id
                                 HAVING COUNT(*) > 1 )

会这样做。

HTH

答案 1 :(得分:1)

您可以在表格上进行自我联接以查找所有重复对:

SELECT 
  a.name    name
, a.type_id type_id_a
, a.code    code_a
, a.lat     lat_a
, a.long    long_a
, b.code    code_b
, b.lat     lat_b
, b.long    long_b
FROM table1 a
JOIN table1 b
ON  a.name    = b.name
AND a.type_id = b.type_id
AND a.ROWID > b.ROWID

为了确保行与自身不匹配,并且每对只输出一次,我添加了a.ROWID > b.ROWID,这适用于Oracle。如果使用其他数据库,则需要采用不同的方法将它们分开。

答案 2 :(得分:0)

如果其中一个比较字段的值为NULL,那么仍​​然找不到双打。 为了得到这些,我使用nvl来比较比较字段中的NULL,并且我知道该值不会出现在该表/字段中。

答案 3 :(得分:-2)

只需将NULLS设为0 ......

...使用NVL功能。