Hir*_*ren 26 sql sql-server-2008
假设我有以下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
Run Code Online (Sandbox Code Playgroud)
现在,我感兴趣的结果如下:
objid firstname lastname active
1 test test 0
2 test test 1
4 test2 test2 0
5 test2 test2 0
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我试过以下查询,
select firstname,lastname from table
group by firstname,lastname
having count(*) > 1
Run Code Online (Sandbox Code Playgroud)
但是这个查询给出了结果
firstname lastname
test test
test2 test2
Run Code Online (Sandbox Code Playgroud)
Ben*_*Ben 43
您已找到重复的记录,但您有兴趣获取附加的所有信息.您需要将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
Run Code Online (Sandbox Code Playgroud)
这与a相同inner join,表示对于子查询中的每个记录,找到重复记录,您可以从主表中找到具有相同firstseen和lastseen组合的所有内容.
您也可以使用in来执行此操作,但您应该测试差异:
select *
from my_table a
where ( firstname, lastname ) in
( select firstname, lastname
from my_table
group by firstname, lastname
having count(*) > 1 )
Run Code Online (Sandbox Code Playgroud)
SELECT DISTINCT t1.*
FROM myTable AS t1
INNER JOIN myTable AS t2
ON t1.firstname = t2.firstname
AND t1.lastname = t2.lastname
AND t1.objid <> t2.objid
Run Code Online (Sandbox Code Playgroud)
这将输出具有重复的每一行,基于firstname和lastname.
这里有一个更清晰的方式来做 Ben 的第一个答案:
WITH duplicates AS (
select firstname, lastname
from my_table
group by firstname, lastname
having count(*) > 1
)
SELECT a.*
FROM my_table a
JOIN duplicates b ON (a.firstname = b.firstname and a.lastname = b.lastname)
Run Code Online (Sandbox Code Playgroud)
小智 5
SELECT user_name,email_ID
FROM User_Master WHERE
email_ID
in (SELECT email_ID
FROM User_Master GROUP BY
email_ID HAVING COUNT(*)>1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78735 次 |
| 最近记录: |