id_specific_price id_product
-------------------------------
1 2
2 2
3 2
4 3
5 3
6 3
7 3
需要删除重复项,预期结果:查询,删除与GROUP BY重复
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
我在哪里出错了?
您不应使用您在子查询中删除的表。您应该使用带有游标的存储过程来存档此目标。 –
存储过程是魔鬼的工作。如果它不能在SQL中解决(它可能可以,但可能是特定于供应商的),我建议在应用程序级别(从Java或PHP等)执行它 - select ...;从...删除id_specific_price(...) –
@CedricSimon Quoi?你的建议是(也许)只对mysql有效,它不喜欢在同一语句中读取已删除或更新的表。 (除非阅读参考做了一些聚合,IIRC) – wildplasser