Oracle-在同一表的两列中检查重复项

时间:2018-07-04 07:22:45

标签: sql oracle oracle11g

我想在同一张表中找到两列的重复项。

示例数据集如下。

Column_1              Column_2

**15440100000220**  15440300002980

15440100000150  **15440100000220**

15440100000170  **15440300002160**

**15440300002160**  15440100006170

如您所见,我在两列中有重复项。第一列中的记录出现在第二列中,第二列中的记录出现在第一列中。

我在寻找解决方案,但只遇到比较两个表重复项的示例。

是否有办法将这些重复项放入选择查询中?如果列1中存在第2列中的记录,则应在查询中捕获列2中的记录。

4 个答案:

答案 0 :(得分:3)

仅列出column_2中出现的column_1值的另一种方法是使用exists

select column_2
from your_table yt
where exists (
  select null
  from your_table yt2
  where yt2.column_1 = yt.column_2
);

我认为这样做的目的比较明确,但是您应该检查各种方法的性能。

答案 1 :(得分:1)

您可以在工会子选择上使用hading

select column_1, count(*) from (

  select column_1 as column_1
  from my_table  
  union all 
  select column_2
  from my_table  

) t 
group by column_1
having count(*) > 1

答案 2 :(得分:1)

您可以自行加入表格:

SELECT t1.column_1 AS col1, t1.column_2 AS col2,
       t2.column_1 AS duplicate_col1, t2.column+2 AS duplicate_col2
FROM   mytable t1
JOIN   mytable t2 ON t1.column_1 = t2.column_2

答案 3 :(得分:1)

您只想要那些重复的ID?进行自我加入:

select distinct t1.column_1
from tablename t1
join tablename t2 on t1.column_1 = t2.column_2