显示具有重复某些列的所有行 [英] Show all rows that have certain columns duplicated
本文介绍了显示具有重复某些列的所有行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有以下SQL表
objid firstname lastname active
1 test test 0
2 test test 1
3 test1 test1 1
4 test2 test2 0
5 test2 test2 0
6 test3 test3 1
现在,我感兴趣的结果如下:
objid firstname lastname active
1 test test 0
2 test test 1
4 test2 test2 0
5 test2 test2 0
我如何才能做到这一点? 我尝试了以下查询,
select firstname,lastname from table
group by firstname,lastname
having count(*) > 1
但此查询得到的结果如下
firstname lastname
test test
test2 test2
推荐答案
您已找到重复的记录,但您有兴趣获得附加到这些记录的所有信息。您需要将副本join
复制到主表才能获取该信息。
select *
from my_table a
join ( select firstname, lastname
from my_table
group by firstname, lastname
having count(*) > 1 ) b
on a.firstname = b.firstname
and a.lastname = b.lastname
这与inner join
相同,这意味着对于子查询中的每条记录,找到重复记录后,您将从主表中找到具有相同的第一次查看和最后一次查看组合的所有内容。
您也可以使用in,though you should test the difference:
来执行此操作select *
from my_table a
where ( firstname, lastname ) in
( select firstname, lastname
from my_table
group by firstname, lastname
having count(*) > 1 )
进一步阅读:
- A visual representation of joins来自Coding Horror
- Join explanation来自维基百科
这篇关于显示具有重复某些列的所有行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文