좋아 서브 쿼리의 모든 결과를 삭제, 중복은 아주 쉽습니다없는 나의 기록하는 알아내는 내 previous questionMySQL은,
보고 :
SELECT *
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
내 중복이 아닌 모든 것을 반환합니다. 그래서 나는 그들을 "no_duplicates"라는 다른 테이블로 옮기고 원래의 테이블에서 삭제할 것이라고 생각했습니다. 그런 다음 원래 테이블에서 복제본을 모두 보거나 수정 한 다음 no_dupes을 다시 추가 할 수있었습니다. 그러나 동안 : 마법처럼
INSERT INTO no_duplicates
SELECT *
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
작품, 다음과 같은 오류가 발생합니다 :
DELETE
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
내 생각 엔 그 쿼리는에 의해 삭제, 독특한, 이미 - 인 - 더 - 테이블 레코드를 반환하면서 집계 함수가 정결하지 않습니다. 내가 옮긴 기록 만 지워지는 것을 내가 무엇을 할 수 있는지 모른다는 것을 제외하고는 어느 것이 이해할 수 있습니다. 검색 한 후 "INSERT가 원본 테이블의 레코드를 강제 종료"구문을 찾지 못했지만 어쨌든 삭제가 실패한 동일한 이유 때문에 실패 할 것이라고 추측합니다.
누락 된 조각을 찾도록 도와 줄 수 있습니까?
죄송합니다. 최대한 효율적으로 모든 것을 움켜 잡고있었습니다. ORDERS는 삭제할 필요가 없다는 것을 알고 있습니다. 그리고 나는 GROUP BY와 HAVING이 있다는 것을 빨리 배웠습니다. 그러므로 질문입니다. – Anthony
ORDER는 DELETE에서 ** 허용되지 않습니다 ** (무의미한 것 제외) – soulmerge
MySQL에서는'ORDER'가 절대적으로 * DELETE에서 허용됩니다. [매우 오랜 시간 동안] (https://dev.mysql.com/doc/refman/4.1/en/delete.html) * "DELETE 문에 ORDER BY 절이 있으면 행은 ORDER BY는 참조 무결성 위반을 피하는 데 필요한 순서로 행을 삭제하는 데 유용 할 수 있습니다 .ORDER BY는 DELETE와 함께 사용할 수 있습니다. MySQL 4.0.0부터 시작합니다. "* – dkarp