programing

MySQL 선택에서 삭제하는 방법

yoursource 2022. 10. 12. 21:36
반응형

MySQL 선택에서 삭제하는 방법

이 코드는 MySQL 5.0에서 작동하지 않습니다. 다시 쓰려면 어떻게 해야 합니까?

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

고유 ID가 없는 열을 삭제하고 싶습니다.대부분의 경우 ID는 1개뿐이라고 덧붙입니다(구문을 사용해 봤는데 동작하지 않습니다).

SELECT(sub) 반환 결과 세트를 표시합니다.그래서 당신은 그것을 사용할 필요가 있다.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
)

또는 Mchl의 제안대로 join을 사용합니다.

DELETE 
  p1
  FROM posts AS p1 
CROSS JOIN (
  SELECT ID FROM posts GROUP BY id HAVING COUNT(id) > 1
) AS p2
USING (id)

inner join 을 사용할 수 있습니다.

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

반응형