Удаление строк с помощью 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 запрос?

701   4  

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

    Ничего не найдено.