Удалить строку, если столбец содержит дубликаты данных SQL - PullRequest
0 голосов
/ 22 сентября 2018

Моя цель - удалить / удалить все строки из таблицы ma_images, которая содержит дубликаты того же фрагмента данных в другой строке, но сохранить первоначальный / первый экземпляр этих данных, которые были продублированы.Другими словами, если в строке № 1 упоминается «image_1.jpg», а затем в строках 3, 5 и 6 также упоминается столбец данных dame dataNameMaster, я хочу удалить экземпляры 3, 5 и 6, но оставить первый экземпляр(# 1) '

Я плохо разбираюсь в SQL и работаю над этим уже целый день, погуглил, прочитал стек, исследовал, не нашел примера, который я могу понять / связать с моимпроблема для достижения решения.

Ниже приведен пример таблицы, с которой я работаю, за исключением некоторых дополнительных столбцов в таблице.Ниже приведен последний бит SQL, который я пробовал до сих пор, и сообщение об ошибке, которое вызвала эта попытка.

example of table minus a lot of columns

ОШИБКА: Вы не можете указать целевую таблицу 'img'для обновления в предложении FROM

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
)

1 Ответ

0 голосов
/ 22 сентября 2018

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...