显示所有重复的行

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)

进一步阅读:


Dmy*_*nko 6

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)

这将输出具有重复的每一行,基于firstnamelastname.

  • 你可能指的是“objid”而不是“id” (2认同)
  • 此外,如果您不区分结果,您将获得重复. (2认同)

vol*_*ron 6

这里有一个更清晰的方式来做 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)

在此处输入图片说明