2013-07-24 7 views
0

는 여기에 내가 PK와 함께 작동하지 않을 수 있다는의가 있다고 가정 해 봅시다 상황을PK가없는 중복 행은 어떻게 삭제합니까?

select name,surname,address from myTable -- returns 150rows 

select distinct name, surname, address from myTable -- returns 60rows 

있어 (일부 일반 선택 disctint). 중복 행을 삭제하려면 어떻게해야합니까?

select name,surname,address from myTable 
MINUS 
select distinct name, surname,address from myTable 

작동 ... MINUS 조언

+0

나를 반복하십시오 : "데이터베이스 개발자이자 사용자로서 명예롭게 전 항상 약속드립니다. 항상, 항상 모든 사람에 대해 기본 키를 정의합니다. 테이블을 만들었습니다. 심지어 나 자신도 훌륭하게 똑똑해지며, 이번에는 정말로 필요하지 않습니다. 그래서 나에게 도와주세요. " –

답변

1
DELETE FROM myTable A 
WHERE A.rowid NOT IN (SELECT MAX(rowid) 
         FROM myTable 
        GROUP BY name,surname,address); 

이 문제와 함께 당신을 도울 것입니다. 그리고 당신은 검색을 사용할 수 있습니다 : 비슷한 질문이있었습니다 here

0

에 대한 모든 것을에게

감사를 삭제하지 않는 시도하십시오 :

delete FROM 
    myTable A 
WHERE 
    a.rowid > 
    ANY (
    SELECT 
     B.rowid 
    FROM 
     myTable B 
    WHERE 
     A.name = B.name AND 
     A.surname=B.surname AND 
     A.address=B.address 
     ); 

참고 :이 테스트하지 않았습니다.

+1

테스트 ** DELETE ** - 쿼리가 매우 과대 평가되었습니다! ;) – AKDADEVIL

+0

예 ... :) 정확하게! 그러나 나는이 쿼리를 실제 예제에서 만들었다. – TechDo

0

새 테이블은 어떻습니까?

create myTable2 as (select distinct name, surname, address from myTable); 
drop myTable; 
관련 문제