Удаление копий - MySQL
Формулировка задачи:
Решил удалить копии в таблице:
>
DELETE q FROM `question` q WHERE EXISTS ( SELECT * FROM `question` qq WHERE q.name = qq.name AND q.id != qq.id )
#1093 - Table 'q' is specified twice, both as a target for 'DELETE' and as a separate source for data
как это понимать? Где mysql тут видит что q 2 раза объвлена?Решение задачи: «Удаление копий»
textual
Листинг программы
delete q FROM `question`q join `question` qq on qq.name = q.name and q.id != qq.id
Объяснение кода листинга программы
В данном коде удаляются дубликаты записей из таблицы question
. Код работает следующим образом:
delete q FROM
questionq
- здесь происходит удаление записей из таблицыquestion
. Переменнаяq
используется для обозначения записи, которую мы хотим удалить.join
questionqq on qq.name = q.name and q.id != qq.id
- здесь происходит объединение таблицыquestion
по полямname
иid
. Мы объединяем таблицу саму с собой, чтобы найти все записи, которые имеют одинаковые имена, но разные идентификаторы. Таким образом, данный код удаляет все записи из таблицыquestion
, которые имеют одинаковые имена, но разные идентификаторы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д