복붙노트

[SQL] 어떻게 여러 열에서 중복을 찾을 수 있습니까?

SQL

어떻게 여러 열에서 중복을 찾을 수 있습니까?

그래서 나는이 SQL 코드를 아래와 같이 뭔가를 원하는 :

select s.id, s.name,s.city 
from stuff s
group by s.name having count(where city and name are identical) > 1

다음을 생산하는 (하지만 이름이나 유일한 도시 일치, 그것은 모두 열에 있어야한다 곳에 무시)하려면 :

id      name  city   
904834  jim   London  
904835  jim   London  
90145   Fred  Paris   
90132   Fred  Paris
90133   Fred  Paris

해결법

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

    1.쌍의 이름과 도시에 대한 중복 ID :

    쌍의 이름과 도시에 대한 중복 ID :

    select s.id, t.* 
    from [stuff] s
    join (
        select name, city, count(*) as qty
        from [stuff]
        group by name, city
        having count(*) > 1
    ) t on s.name = t.name and s.city = t.city
    
  2. ==============================

    2.

     SELECT name, city, count(*) as qty 
     FROM stuff 
     GROUP BY name, city HAVING count(*)> 1
    
  3. ==============================

    3.이런 식으로 뭔가 트릭을 할 것입니다. 그래서 몇 가지 검사를해야합니까, 성능에 대해 알고하지 마십시오.

    이런 식으로 뭔가 트릭을 할 것입니다. 그래서 몇 가지 검사를해야합니까, 성능에 대해 알고하지 마십시오.

    select
      id, name, city
    from
      [stuff] s
    where
    1 < (select count(*) from [stuff] i where i.city = s.city and i.name = s.name)
    
  4. ==============================

    4.수를 사용 (*) 이상 (기준 ... 파티션)도 영향을받는 모든 행과 모든 원하는 열을 나열하면서, 불필요한 반복을 찾을 간단하고 효율적인 방법을 제공합니다 :

    수를 사용 (*) 이상 (기준 ... 파티션)도 영향을받는 모든 행과 모든 원하는 열을 나열하면서, 불필요한 반복을 찾을 간단하고 효율적인 방법을 제공합니다 :

    SELECT
        t.*
    FROM (
        SELECT
            s.*
          , COUNT(*) OVER (PARTITION BY s.name, s.city) AS qty
        FROM stuff s
        ) t
    WHERE t.qty > 1
    ORDER BY t.name, t.city
    

    가장 최근의 RDBMS 버전 (*) 이상 (기준 ... 파티션) 수를 지원하는 동안 아래와 같이 MySQL의 V 8.0, "윈도우 함수"를 도입 (MySQL은 8.0)

    DB <> 바이올린 여기

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

    5.자기 물건과 일치하는 이름과 도시에 가입하는 방법은 있습니다. 계산에 의해 다음 그룹.

    자기 물건과 일치하는 이름과 도시에 가입하는 방법은 있습니다. 계산에 의해 다음 그룹.

    select 
       s.id, s.name, s.city 
    from stuff s join stuff p ON (
       s.name = p.city OR s.city = p.name
    )
    group by s.name having count(s.name) > 1
    
  6. ==============================

    6.늦은이 게시물에 게임에 작은, 그러나 나는 효율적인 / 꽤 유연하게이 방법을 발견

    늦은이 게시물에 게임에 작은, 그러나 나는 효율적인 / 꽤 유연하게이 방법을 발견

    select 
        s1.id
        ,s1.name
        ,s1.city 
    from 
        stuff s1
        ,stuff s2
    Where
        s1.id <> s2.id
        and s1.name = s2.name
        and s1.city = s2.city
    
  7. ==============================

    7.(70 개) 컬럼 만 4 나타내는 중복으로 준비 테이블을 감안할 때, 이 코드는 기분을 상하게 열을 반환합니다 :

    (70 개) 컬럼 만 4 나타내는 중복으로 준비 테이블을 감안할 때, 이 코드는 기분을 상하게 열을 반환합니다 :

    SELECT 
        COUNT(*)
        ,LTRIM(RTRIM(S.TransactionDate)) 
        ,LTRIM(RTRIM(S.TransactionTime))
        ,LTRIM(RTRIM(S.TransactionTicketNumber)) 
        ,LTRIM(RTRIM(GrossCost)) 
    FROM Staging.dbo.Stage S
    GROUP BY 
        LTRIM(RTRIM(S.TransactionDate)) 
        ,LTRIM(RTRIM(S.TransactionTime))
        ,LTRIM(RTRIM(S.TransactionTicketNumber)) 
        ,LTRIM(RTRIM(GrossCost)) 
    HAVING COUNT(*) > 1
    

    .

  8. from https://stackoverflow.com/questions/8149210/how-do-i-find-duplicates-across-multiple-columns by cc-by-sa and MIT license