이 코드는 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
)
SELECT id FROM posts GROUP BY id HAVING ( COUNT(id) > 1 )
DELETE
p1
FROM posts AS p1
CROSS JOIN (
SELECT ID FROM posts GROUP BY id HAVING COUNT(id) > 1
) AS p2
USING (id)
CROSS JOIN
분명히 데카르트 조인을 수행하므로 불필요한 작업을 수행하거나 차선으로 수행 할 수 있습니까? 누구든지 설명 할 수 있습니까?
USING
절이 없는 경우에만 데카르트 곱을 수행합니다 . 하여 USING
제품이 동일 값을 갖는 쌍에 한정되어 id
열을하므로 실제로 매우 제한.
DELETE p1 FROM posts AS p1 INNER JOIN ( SELECT ID FROM posts GROUP BY id HAVING COUNT(id) > 1 ) AS p2 ON p2.ID=p1.ID