我想在同一张表中找到两列的重复项。
示例数据集如下。
Column_1 Column_2
**15440100000220** 15440300002980
15440100000150 **15440100000220**
15440100000170 **15440300002160**
**15440300002160** 15440100006170
如您所见,我在两列中有重复项。第一列中的记录出现在第二列中,第二列中的记录出现在第一列中。
我在寻找解决方案,但只遇到比较两个表重复项的示例。
是否有办法将这些重复项放入选择查询中?如果列1中存在第2列中的记录,则应在查询中捕获列2中的记录。
答案 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