복붙노트

[SQL] 모든 중복 행을보기

SQL

모든 중복 행을보기

나는 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

해결법

  1. ==============================

    1.당신은 당신의 중복 기록을 발견했습니다하지만 당신은 그들에 부착 된 모든 정보를 얻기에 관심이 있습니다. 당신은 그 정보를 얻을 수 있도록 기본 테이블에 중복 가입 할 필요가있다.

    당신은 당신의 중복 기록을 발견했습니다하지만 당신은 그들에 부착 된 모든 정보를 얻기에 관심이 있습니다. 당신은 그 정보를 얻을 수 있도록 기본 테이블에 중복 가입 할 필요가있다.

    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
    

    이 내부 조인 수단과 동일하다 같은 firstseen 및 lastseen 조합이 메인 테이블에서 모든 것을 찾을 중복 기록을 발견하여 하위 쿼리의 모든 레코드에 대해.

    당신이 그 차이를 테스트해야하지만 당신은 또한에서이 작업을 수행 할 수 있습니다 :

    select *
      from my_table a
     where ( firstname, lastname ) in   
           ( select firstname, lastname 
               from my_table 
              group by firstname, lastname 
             having count(*) > 1 )
    
  2. ==============================

    2.여기에 벤의 첫 번째 대답을 할 수있는 좀 더 읽기 쉬운 방법이있다 :

    여기에 벤의 첫 번째 대답을 할 수있는 좀 더 읽기 쉬운 방법이있다 :

    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)
    
  3. ==============================

    3.

    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
    

    이 출력됩니다 이름 및 성에 내놓고, 중복이있는 모든 행.

  4. ==============================

    4.

    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) 
    

  5. ==============================

    5.좋은 옵션은 테이블에서 모든 중복 값을 얻을

    좋은 옵션은 테이블에서 모든 중복 값을 얻을

     select * from Employee where Name in (select Name from Employee group by Name having COUNT(*)>1)
    
  6. ==============================

    6.이것은 가장 쉬운 방법입니다 :

    이것은 가장 쉬운 방법입니다 :

    SELECT * FROM yourtable a WHERE EXISTS (SELECT * FROM yourtable b WHERE a.firstname = b.firstname AND a.secondname = b.secondname AND a.objid <> b.objid)
    
  7. ==============================

    7.당신은 테이블에서 모든 중복 ID를 인쇄하려면 :

    당신은 테이블에서 모든 중복 ID를 인쇄하려면 :

    select * from table where id in (select id from table group By id having count(id)>1)
    
  8. ==============================

    8.나는 창 기능을 사용하여 아무 대답이 없음을 놀라게하고있다. 난 그냥이 사용 사례를 가로 질러 와서이 나를 도왔다.

    나는 창 기능을 사용하여 아무 대답이 없음을 놀라게하고있다. 난 그냥이 사용 사례를 가로 질러 와서이 나를 도왔다.

    select t.objid, t.firstname, t.lastname, t.active
    from
    (
    select t.*, count(*) over (partition by firstname, lastname) as cnt
    from my_table t
    ) t
    where t.cnt > 1;
    

    바이올린 - https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=c0cc3b679df63c4d7d632cbb83a9ef13

    형식은 같이 간다

    select
        tbl.relevantColumns
    from
    (
        select t.*, count(*) over (partition by key_columns) as cnt
        from desiredTable t
    ) as tbl
    where tbl.cnt > 1;
    

    당신이 key_columns의 개수> 1 중복 행을 식별하는 데 사용되는 테이블 (때로는 모든 열)에서 필요한 어떤 열이 형식의 선택. key_columns 컬럼의 모든 숫자가 될 수 있습니다.

  9. ==============================

    9.이 답변은 좋은 일하지 않을 수 있습니다,하지만 난 그것을 이해하기 간단하다 생각합니다.

    이 답변은 좋은 일하지 않을 수 있습니다,하지만 난 그것을 이해하기 간단하다 생각합니다.

    SELECT * FROM table1 WHERE (firstname, lastname) IN ( SELECT firstname, lastname FROM table1 GROUP BY firstname, lastname having count() > 1);
    
  10. ==============================

    10.이 쿼리 반환 중복

    이 쿼리 반환 중복

    SELECT * FROM (
      SELECT  a.* 
        FROM table a 
        WHERE (`firstname`,`lastname`) IN (
            SELECT `firstname`,`lastname` FROM table 
            GROUP BY `firstname`,`lastname` HAVING COUNT(*)>1       
            )  
        )z WHERE z.`objid` NOT IN (
            SELECT MIN(`objid`) FROM table 
            GROUP BY `firstname`,`lastname` HAVING COUNT(*)>1
            )                                         
    
  11. from https://stackoverflow.com/questions/10324107/show-all-duplicated-rows by cc-by-sa and MIT license