mysql - 使用 GROUP BY 删除重复项的查询

标签 mysql sql duplicates

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

我哪里错了?

最佳答案

如果您正在寻找 MySQL 的解决方案,那么您可以使用合适的 multi table DELETE语法以及像这样的 JOIN

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;

结果:

| ID_SPECIFIC_PRICE | ID_PRODUCT |
|-------------------|------------|
|                 3 |          2 |
|                 7 |          3 |

这是 SQLFiddle 演示

关于mysql - 使用 GROUP BY 删除重复项的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19146794/

相关文章:

MySQL 触发插入文本进入无限循环

mysql - Rails 4 ActiveRecord 按关联计数排序

mysql - 查找当前结果在Mysql中的位置

while 循环外的 PHP count 变量不增加

sql - PostgreSQL:如何从数据输出中编辑数据?

sorting - 如何仅按重复项排序

Excel 2007 : Remove rows by duplicates in column value

php - 排除在层次架构中没有父级的数据

查找表的sql性能

mysql - 选择填充字段较多的记录