복붙노트

[SQL] PostgreSQL의와 중복 행을 찾기

SQL

PostgreSQL의와 중복 행을 찾기

우리는 다음과 같은 열이있는 사진의 테이블이 있습니다 :

id, merchant_id, url 

이 표는 조합 MERCHANT_ID, URL에 대한 중복 값이 ​​포함되어 있습니다. 그래서 하나의 행보다 여러 번 나타날 가능성이 있습니다.

234 some_merchant  http://www.some-image-url.com/abscde1213
235 some_merchant  http://www.some-image-url.com/abscde1213
236 some_merchant  http://www.some-image-url.com/abscde1213

그 중복을 제거하는 가장 좋은 방법은 무엇입니까? (나는 3. PostgreSQL을 9.2 사용하고 레일)

해결법

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

    1.여기에 내 걸릴 것입니다.

    여기에 내 걸릴 것입니다.

    select * from (
      SELECT id,
      ROW_NUMBER() OVER(PARTITION BY merchant_Id, url ORDER BY id asc) AS Row
      FROM Photos
    ) dups
    where 
    dups.Row > 1
    

    맞춤에 의해 순서에 당신이 당신의 사양에 삭제하고자하는 기록을 재생할 주시기 바랍니다.

    SQL 바이올린 => http://sqlfiddle.com/#!15/d6941/1/0

    포스트 그레스 9.2 SQL 바이올린은 더 이상 지원되지 않습니다; 포스트 그레스 9.3 SQL 바이올린을 업데이트

  2. ==============================

    2.sgeddes의 대답의 두 번째 부분은 포스트 그레스에 대한 작업 (바이올린 용도의 MySQL)을하지 않습니다. 여기에 포스트 그레스를 사용하여 그의 대답의 업데이트 버전은 다음과 같습니다 http://sqlfiddle.com/#!12/6b1a7/1

    sgeddes의 대답의 두 번째 부분은 포스트 그레스에 대한 작업 (바이올린 용도의 MySQL)을하지 않습니다. 여기에 포스트 그레스를 사용하여 그의 대답의 업데이트 버전은 다음과 같습니다 http://sqlfiddle.com/#!12/6b1a7/1

    DELETE FROM Photos AS P1  
    USING Photos AS P2
    WHERE P1.id > P2.id
       AND P1.merchant_id = P2.merchant_id  
       AND P1.url = P2.url;  
    
  3. ==============================

    3.나는 당신을 위해 몇 가지 옵션을 참조하십시오.

    나는 당신을 위해 몇 가지 옵션을 참조하십시오.

    그것을하는 빠른 방법은이 같은 사용 무언가 (당신이 (234)를 여러 번 위의 언급대로 ID 열이 고유하지 가정) :

    CREATE TABLE tmpPhotos AS SELECT DISTINCT * FROM Photos;
    DROP TABLE Photos;
    ALTER TABLE tmpPhotos RENAME TO Photos;
    

    여기에 SQL 바이올린입니다.

    당신은 어떤이있는 경우 테이블에 다시 제약 조건을 추가해야합니다.

    귀하의 ID 열이 고유 경우 가장 낮은 ID를 유지하는 것처럼, 당신은 뭔가를 할 수 :

    DELETE FROM P1  
    USING Photos P1, Photos P2
    WHERE P1.id > P2.id
       AND P1.merchant_id = P2.merchant_id  
       AND P1.url = P2.url;  
    

    그리고 바이올린.

  4. from https://stackoverflow.com/questions/14471179/find-duplicate-rows-with-postgresql by cc-by-sa and MIT license