SQL查找违反UNIQUE索引的行

时间:2012-08-20 07:39:43

标签: sql oracle11g

我想在表中的两个(或更多)列上放置唯一索引,但我得到“找到重复的密钥”。如何选择那些导致重复的行?

2 个答案:

答案 0 :(得分:14)

您可以使用Group ByHaving

SELECT col1,
       col2
FROM   table
GROUP  BY col1,
          col2
HAVING Count(*) > 1

基本上 - 对值进行分组,然后筛选出存在多个值的实例。

答案 1 :(得分:0)

您可以使用以下方式之一:

SELECT t1.rowid
FROM   this_table t1
WHERE  EXISTS (SELECT '1'
               FROM   this_table t2
               WHERE  t2.column_value1 = t1.column_value1
                      AND t2.column_value2 = t1.column_value2
                      AND t2.rowid > t1.rowid);

SELECT *
FROM   this_table_name a
WHERE  a.rowid > ANY (SELECT b.rowid
                      FROM   this_table_name b
                      WHERE  a.col1 = b.col1
                             AND a.col2 = b.col2);

SELECT my_column,
       Count(my_column)
FROM   this_table_name
GROUP  BY my_column
HAVING Count (my_column) > 1;