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

标签 mysql sql duplicates sql-delete

我的目标是从 ma_images 表中删除/删除任何行,这些行在另一行中包含同一数据的重复项,但保留已复制的该数据的原始/第一个实例。换句话说,如果第 1 行提到“image_1.jpg”,然后第 3、5 和 6 行也提到 dame data imageNameMaster 列,我想删除实例 3、5 和 6 但保留第一个实例(#1)'

我不擅长sql,现在已经在这方面工作了一天,谷歌搜索,阅读堆栈,研究,还没有找到一个我可以理解/与我的问题相关的示例来实现解决方案。

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

example of table minus a lot of columns

错误:您无法在 FROM 子句中指定要更新的目标表“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 对于在子查询中使用更新/删除的表非常挑剔。

最好的解决方案是使用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;

关于mysql - 如果列包含重复数据 SQL 则删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52459164/

相关文章:

sql - mysql存储函数参数

php - 从查询中获取大致搜索结果数量的最佳方法是什么?

python - 用 Python 编写的 SQL 数据库 GUI

mysql - 日期时间比较?

arrays - 如何检索未包含在谷歌表格中另一列中的列中的值

c# - 查询以检测重复行

matlab:删除重复值

javascript - 使用 PHP 的服务器发送事件

sql - 在 Google 电子表格中查询

php - 按天按周分组获取最近 4 周的记录