복붙노트

[SQL] 어떻게 MySQL의에서 선택에서 삭제?

SQL

어떻게 MySQL의에서 선택에서 삭제?

이 코드는 다시 쓰기에 그것을 작동하게하는 방법을, 5.0이 작동하지 않습니다

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

나는 고유 ID를 해달라고 열을 삭제할. 나는 그것의 하나의 ID 만이 시간의 대부분 추가합니다 (I 구문의 시도를하고 그것은뿐만 아니라 작업을 나던).

해결법

  1. ==============================

    1.SELECT (하위) 쿼리 결과 집합을 반환합니다. 당신이 IN을 사용할 필요가 그래서가 아니라 WHERE 절에 =.

    SELECT (하위) 쿼리 결과 집합을 반환합니다. 당신이 IN을 사용할 필요가 그래서가 아니라 WHERE 절에 =.

    이 답변에서와 같이 또한 같은 쿼리에서 하위 쿼리에서 동일한 테이블을 수정할 수 없습니다. 그러나, 당신도 다음 별도의 쿼리에서 삭제, 또는 둥지 다른 하위 쿼리를 선택 할 수있는 내부 하위 쿼리 결과 별칭 (외모가 아니라 해키하지만)

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

    또는 사용은 같은 Mchl에 의해 제안 조인.

  2. ==============================

    2.

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

    3.당신이 내부 사용할 수 있습니다 조인

    당신이 내부 사용할 수 있습니다 조인

    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  
    
  4. ==============================

    4.당신은 중복의 각 세트에서 모든 중복,하지만 하나를 삭제하려면이 하나 개의 솔루션입니다 :

    당신은 중복의 각 세트에서 모든 중복,하지만 하나를 삭제하려면이 하나 개의 솔루션입니다 :

    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;
    
  5. from https://stackoverflow.com/questions/4562787/how-to-delete-from-select-in-mysql by cc-by-sa and MIT license