programing

여러 열을 사용한 중복에 대한 MySQL 선택 레코드 선택

copyandpastes 2022. 11. 8. 21:38
반응형

여러 열을 사용한 중복에 대한 MySQL 선택 레코드 선택

테이블에서 레코드를 선택하거나 데이터베이스의 다른 레코드와 여러 열이 동일한 새 빈 테이블에 레코드를 삽입하고 싶습니다.이 질문과 유사한 문제.MySQL에서 중복된 레코드를 찾습니다. 단, 하나의 열만 비교합니다.또한 아래 예제의 C열 중 하나는 정수입니다.위 링크의 질문처럼 각 행을 반환해 주셨으면 합니다.불행하게도 나는 아직 나 스스로 이것을 알아내기 위해 어떻게 참여하는지 충분히 알지 못한다.아래 코드는 실제 SQL 코드 요구와 전혀 유사하지 않다는 것을 알고 있습니다.이것이 제가 얻고자 하는 비교를 설명하는 가장 명확한 방법입니다.

SELECT ColumnE, ColumnA, ColumnB, ColumnC from table where (
  Row1.ColumnA = Row2.ColumnA &&
  Row1.ColumnB = Row2.ColumnB &&
  Row1.ColumnC = Row2.ColumnC
)

어떤 도움이라도 주시면 감사하겠습니다.제가 본 "Select duplicates from MYSQL" 질문은 모두 비교 대상으로 한 컬럼만 사용합니다.

여러 열 사이의 중복을 카운트하려면 다음과 같이 하십시오.group by:

select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
from table
group by ColumnA, ColumnB, ColumnC

중복된 값만 원하는 경우 카운트는 1보다 커집니다.이 값은 다음 명령어를 사용하여 얻을 수 있습니다.having절:

select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
from table
group by ColumnA, ColumnB, ColumnC
having NumDuplicates > 1

모든 중복 행을 반환하려면 마지막 쿼리를 원래 데이터에 다시 결합합니다.

select t.*
from table t join
     (select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
      from table
      group by ColumnA, ColumnB, ColumnC
      having NumDuplicates > 1
     ) tsum
     on t.ColumnA = tsum.ColumnA and t.ColumnB = tsum.ColumnB and t.ColumnC = tsum.ColumnC

모든 열 값이 NULL이 아닌 경우 다음과 같이 하십시오.

     on (t.ColumnA = tsum.ColumnA or t.ColumnA is null and tsum.ColumnA is null) and
        (t.ColumnB = tsum.ColumnB or t.ColumnB is null and tsum.ColumnB is null) and
        (t.ColumnC = tsum.ColumnC or t.ColumnC is null and tsum.ColumnC is null)

편집:

가지고 계신 경우NULL값도 사용할 수도 있습니다.NULL- 안전 작업자:

     on t.ColumnA <=> tsum.ColumnA and
        t.ColumnB <=> tsum.ColumnB and
        t.ColumnC <=> tsum.ColumnC 

유니언을 쓰거나 임시 테이블을 만들어보는 건 어때요?하지만 개인적으로는 임시 테이블을 만드는 것보다 유니언을 사용하는 것이 좋습니다. 그렇게 하는 데 시간이 오래 걸리므로 다음을 시도해 보십시오.

  select field1, field2 from(
   select '' as field2, field1, count(field1) as cnt FROM list GROUP BY field2 HAVING cnt > 1
    union
    select ''as field1, field2, cound(field2) as cnt from list group by field1 having cnt > 1
  )

이게 말이 됐으면 좋겠어요:)

언급URL : https://stackoverflow.com/questions/16324328/mysql-select-records-for-duplicates-using-multiple-columns

반응형