Nice programing

MySQL의 선택에서 삭제하는 방법은 무엇입니까?

nicepro 2020. 10. 15. 21:42
반응형

MySQL의 선택에서 삭제하는 방법은 무엇입니까?


이 코드는 MySQL 5.0에서는 작동하지 않습니다. 작동하도록 다시 작성하는 방법

DELETE FROM posts where id=(SELECT id FROM posts GROUP BY id  HAVING ( COUNT(id) > 1 ))

고유 ID가없는 열을 삭제하고 싶습니다. 나는 대부분의 경우 유일한 ID를 추가 할 것입니다 (구문에서 시도했지만 잘 작동하지 않습니다).


SELECT(하위) 쿼리는 결과 집합을 반환 합니다 . 따라서 절이 IN아니라 를 사용해야 =합니다 WHERE.

또한 이 답변에 표시된 것처럼 동일한 쿼리 내의 하위 쿼리에서 동일한 테이블을 수정할 수 없습니다. 그러나 다음 중 하나를 수행 할 수 있습니다 SELECTDELETE별도의 쿼리, 또는 둥지 다른 하위 쿼리 및 별칭 내부 하위 쿼리 결과 (하지만, 외모 오히려 해키을)에서 :

DELETE FROM posts WHERE id IN (
    SELECT * FROM (
        SELECT id FROM posts GROUP BY id HAVING ( COUNT(id) > 1 )
    ) AS p
)

또는 Mchl이 제안한 조인 사용 하십시오 .


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;

참고 URL : https://stackoverflow.com/questions/4562787/how-to-delete-from-select-in-mysql

반응형