본문 바로가기
MySql

MySQL GROUP BY를 사용하여 중복을 삭제하는 쿼리

by 베이스 공부 2020. 12. 22.
반응형
id_specific_price    id_product  
-------------------------------
            1                2  
            2                2  
            3                2  
            4                3  
            5                3  
            6                3  
            7                3

중복 삭제 필요, 예상 결과 :

id_specific_price    id_product  
-------------------------------
            3                2  
            7                3
SELECT * 
  FROM ps_specific_price 
 WHERE id_specific_price NOT IN 
 (SELECT MAX(id_specific_price) 
    FROM ps_specific_price 
   GROUP BY id_product) 

작동하지만

DELETE FROM ps_specific_price 
 WHERE id_specific_price NOT IN 
(SELECT MAX(id_specific_price) 
   FROM ps_specific_price 
  GROUP BY id_product)

하지 않습니다. 이 문제를 해결할 수있는 많은 예제가 있지만 어떤 이유로 적응할 수 없습니다. 나는 그것이 GROUP BY라고 믿습니다. 예를 들면 :

DELETE FROM ps_specific_price 
 WHERE id_specific_price NOT IN
 (SELECT MAX(p.id_specific_price) 
    FROM (SELECT * FROM ps_specific_price ) as p)
   GROUP BY id_product

여기서 내가 어디로 잘못 갔습니까?

 

해결 방법

 


DELETE p
  FROM ps_specific_price p JOIN
(
  SELECT id_product, MAX(id_specific_price) id_specific_price
    FROM ps_specific_price
   GROUP BY id_product
) d 
   ON p.id_product = d.id_product
  AND p.id_specific_price <> d.id_specific_price;

결과:


 

참조 페이지 https://stackoverflow.com/questions/19146794

 

 

반응형

댓글