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