У меня есть реляционная база данных MySQL, использующая InnoDB, которая связывает курсы с посетителями курса. Проблема с этой базой данных заключается в том, что столбец course_id
в course_attendees
не был задан в качестве внешнего ключа. Существует множество курсов, на которые пытается сослаться таблица course_attendees
.
Я хотел удалить эти записи, так как курсы больше не принадлежат. Я написал этот запрос выбора, который выбирает все курсы, которые должны быть удалены:
SELECT
ca.`id`
FROM `course_attendees` AS ca
LEFT JOIN `courses` c
ON ca.`course_id` = c.`id`
WHERE c.`id` IS NULL
Теперь, когда я пытаюсь обернуть это в запрос DELETE с использованием подзапроса, подобного этому:
DELETE FROM courses AS C1
WHERE C1.`id` IN (
SELECT
ca.`id`
FROM `course_attendees` AS ca
LEFT JOIN `courses` c
ON ca.`course_id` = c.`id`
WHERE c.`id` IS NULL
);
Я получаю следующую ошибку:
[2018-08-30 08:34:26] [42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS C1
[2018-08-30 08:34:26] [42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS C1
[2018-08-30 08:34:26] WHERE C1.`id` IN (
[2018-08-30 08:34:26] SELECT
[2018-08-30 08:34:26] ca.`id`
[2018-08-30 08:34:26] FROM `course_attendees` AS c' at line 1
Поскольку запрос SELECT работает, в чем здесь проблема и как ее исправить?
EDIT
После ответа Тима я понял эту ошибку:
[HY000][1093] You can't specify target table 'courses' for update in FROM clause