Удаление строк с помощью MySQL LEFT JOIN
у меня есть две таблицы, одна для крайних сроков работы, одна для описания работы. Каждое задание может иметь статус, а некоторые статусы означают, что крайние сроки заданий должны быть удалены из другой таблицы.
я могу легко SELECT задания / сроки, которые соответствуют моим критериям с LEFT JOIN:
SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
(status принадлежит job стол deadline)
но когда я хотел бы удалить эти строки из deadline, MySQL выдает ошибку. Мой запрос это:
DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
ошибка MySQL ничего не говорит:
у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом ' LEFT JOIN
jobна срок.аргумент job_id = работа.аргумент job_id, гдеstatus= 'szaml' в строке 1
как я могу повернуть мой SELECT в работе DELETE запрос?
4 ответов:
вам просто нужно указать на какие таблицы, чтобы применить
DELETE.удалить только
deadlineстроки:DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....удалить
deadlineиjobстроки:DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....удалить только
jobстроки:DELETE `job` FROM `deadline` LEFT JOIN `job` ....
Если вы используете "table as", то укажите его для удаления.
в примере я удаляю все строки table_1, которые не существуют в table_2.
DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL
DELETE FROM deadline where ID IN ( SELECT d.ID FROM `deadline` d LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno');Я не уверен, что такой подзапрос работает в MySQL, но попробуйте. Я предполагаю, что у вас есть столбец ID в таблице срока.
попробуйте это:
DELETE `deadline` FROM `deadline` INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id` WHERE `job`.`id` = 123
Comments