미안하지만 당신에게 묻기는하지만 좋은 해결책이 떠오르는 것처럼 보일 수는 없지만 온라인에서 연구를 해봤지만이 제한된 경험으로 나는 내가 무엇인지 알아낼 수 없었습니다. 잘못하고있다. 나는 사본이 600000 개가 넘고 레코드에는 최대 ID 번호를 기반으로 제거 된 중복이 필요합니다. 왜냐하면 레코드에는 정확히 중복되지 않는 많은 다른 필드가 있기 때문에 계산하기가 힘듭니다. 도와주세요.액세스 최대 ID로 중복 레코드 제거
샘플 나는이 시도이
미안하지만 당신에게 묻기는하지만 좋은 해결책이 떠오르는 것처럼 보일 수는 없지만 온라인에서 연구를 해봤지만이 제한된 경험으로 나는 내가 무엇인지 알아낼 수 없었습니다. 잘못하고있다. 나는 사본이 600000 개가 넘고 레코드에는 최대 ID 번호를 기반으로 제거 된 중복이 필요합니다. 왜냐하면 레코드에는 정확히 중복되지 않는 많은 다른 필드가 있기 때문에 계산하기가 힘듭니다. 도와주세요.액세스 최대 ID로 중복 레코드 제거
샘플 나는이 시도이
DELETE
FROM yourtable AS a
WHERE a.id NOT IN
(
SELECT Max(b.id)
FROM yourtable AS b
WHERE a.field1 = b.field1
)
하위 쿼리를 사용하면 field1의 각 값에 대한 최대 ID를 선택할 수 있습니다. delete 문은 id가 최대 id vale와 같지 않은 field1의 값마다 모든 레코드를 삭제합니다.
그렇다면 FIELD1이 같고 ID가 큰 다른 행이 있으면 행이 삭제되어야한다는 것입니다. SQL로 번역 문장이된다 :
delete from my_table where (field1,id) not in
(select field1, max(id) from my_table group by field1);
아니에요 :
delete from my_table m where exists
(select 1 from my_table where field1=m.field1 and id>m.id);
또 다른 방법은 필드 1에서 각각의 고유 한 값에 대한 최대 (ID)와 사람 사이에없는 모든 행을 삭제하는 것입니다 둘 중 어느 것이 읽기 쉬운 지 확인하십시오.
이 SQL에 대한 오류 메시지가 나타납니다 "기본 쿼리의 FROM 절에 EXISTS 예약어를 사용하지 않고 둘 이상의 필드를 반환 할 수있는 하위 쿼리를 작성했습니다" SQL : delete * dupcombination2 여기서 (field1, id)는 에 없습니다 (select field1, max (id) from dupcombination2 group by field1); –
방금 첫 번째 방법을 시도했지만 두 번째 방법은 시도하지 않았습니다. 그냥 fyi. –
좋아, 모든 데이터베이스가 다중 값 IN 또는 NOT IN을 지원하는 것은 아닙니다. –
네가 정말 잘 했어. 너의 테이블 뒤에있는 추론을 a와 yourtable로 이해하려고 노력 했어. 따라서 우리는 가상 테이블을 만들고 둘 다 비교하지만 중복이 아닌 최대를 비교하는 것입니다. –
가상 테이블이 아니라 하위 쿼리가 포함 된 쿼리 (삭제 bla bla)입니다. 두 쿼리 모두 하나의 동일한 테이블을 참조합니다. 이제 하위 쿼리의 WHERE 절을 사용하여 한 테이블 내의 데이터를 비교하려는 경우 별칭을 사용해야합니다. 그렇지 않으면 동일한 테이블 내의 데이터를 비교할 수 없습니다. 나는 SELF JOINS를 읽을 것을 제안합니다. – Rene