Удаление строк с 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