이 코드는 MySQL 5.0에서 작동하지 않습니다. 작동하도록 다시 작성하는 방법
DELETE FROM posts where id=(SELECT id FROM posts GROUP BY id HAVING ( COUNT(id) > 1 ))
고유 ID가없는 열을 삭제하고 싶습니다. 나는 대부분의 경우 유일한 ID를 추가 할 것입니다 (구문에서 시도했지만 잘 작동하지 않습니다).
답변
SELECT
(하위) 쿼리는 결과 집합을 반환 합니다 . 따라서 절이 IN
아니라 를 사용해야 =
합니다 WHERE
.
또한 이 답변에 표시된 것처럼 동일한 쿼리 내의 하위 쿼리에서 동일한 테이블을 수정할 수 없습니다. 그러나 다음 중 하나를 수행 할 수 있습니다 SELECT
후 DELETE
별도의 쿼리, 또는 둥지 다른 하위 쿼리 및 별칭 내부 하위 쿼리 결과 (하지만, 외모 오히려 해키을)에서 :
DELETE FROM posts WHERE id IN (
SELECT * FROM (
SELECT id FROM posts GROUP BY id HAVING ( COUNT(id) > 1 )
) AS p
)
답변
DELETE
p1
FROM posts AS p1
CROSS JOIN (
SELECT ID FROM posts GROUP BY id HAVING COUNT(id) > 1
) AS p2
USING (id)
답변
내부 조인을 사용할 수 있습니다.
DELETE
ps
FROM
posts ps INNER JOIN
(SELECT
distinct id
FROM
posts
GROUP BY id
HAVING COUNT(id) > 1 ) dubids on dubids.id = ps.id
답변
모든 중복 항목을 삭제하고 싶지만 각 중복 항목 중 하나를 삭제하려면 다음과 같은 해결책이 있습니다.
DELETE posts
FROM posts
LEFT JOIN (
SELECT id
FROM posts
GROUP BY id
HAVING COUNT(id) = 1
UNION
SELECT id
FROM posts
GROUP BY id
HAVING COUNT(id) != 1
) AS duplicate USING (id)
WHERE duplicate.id IS NULL;