Удаление копий - 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. Код работает следующим образом:

  1. delete q FROMquestionq - здесь происходит удаление записей из таблицы question. Переменная q используется для обозначения записи, которую мы хотим удалить.
  2. joinquestionqq on qq.name = q.name and q.id != qq.id - здесь происходит объединение таблицы question по полям name и id. Мы объединяем таблицу саму с собой, чтобы найти все записи, которые имеют одинаковые имена, но разные идентификаторы. Таким образом, данный код удаляет все записи из таблицы question, которые имеют одинаковые имена, но разные идентификаторы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы