如果列包含重复数据,则删除行 SQL

Remove row if column contains duplicate data SQL

我的目标是 delete/remove 来自 ma_images table 的任何行,其中包含花药行中相同数据的副本,但要保留 original/first 已复制的数据实例。换句话说,如果第 1 行提到 'image_1.jpg',然后第 3、5 和 6 行也提到 dame data imageNameMaster 列,我想删除实例 3、5 和 6,但保留第一个实例(#1)'

我不擅长 sql 并且已经为此工作了一天,用谷歌搜索,阅读堆栈,研究,还没有找到我可以 understand/relate问题影响解决方案。

下面是我正在使用的 table 减去 table 中的一些额外列的示例。下面是我迄今为止尝试过的 sql 的最新位以及该尝试产生的错误消息。

错误:您不能在 FROM 子句

中为更新指定目标 table 'img'
delete img
from  ma_images AS img
where exists (
    select 1
    from ma_images ref
    where ref.ImgNameMaster = img.ImgNameMaster

        and ref.ImgID < img.ImgID
)

MySQL 对于在子查询中使用 table 作为 updated/deleted 很挑剔。

最好的解决办法是使用join:

delete img
    from ma_images img JOIN
         ma_images ref
         on ref.ImgNameMaster = img.ImgNameMaster and    
            ref.ImgID < img.ImgID;

此版本可能会多次尝试删除同一行。所以,我建议:

delete img
    from ma_images img JOIN
         (select ref.ImgNameMaster, MIN(ImgId) as min_ImgId
          from ma_images ref
          group by ref.ImgNameMaster
         ) ref
         on ref.ImgNameMaster = img.ImgNameMaster and    
            img.ImgID > ref.min_ImgID;