Удаление строк с помощью 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
table not 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
ON deadline.job_id = job.job_id WHERE status
= 'szaml' в строке 1
Как я могу превратить свой SELECT
в рабочий DELETE
запрос?
Ответы
Ответ 1
Вам просто нужно указать, на каких таблицах применять 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` ....
Ответ 2
Если вы используете "table as", укажите его для удаления.
В примере я удаляю все строки таблицы_1, которые не существуют в таблице_2.
DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL
Ответ 3
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, но попробуйте. Я предполагаю, что у вас есть столбец идентификатора в таблице крайних сроков.
Ответ 4
Попробуй это:
DELETE 'deadline'
FROM 'deadline'
INNER JOIN 'job' ON 'deadline'.'job_id' = 'job'.'id'
WHERE 'job'.'id' = 123
Ответ 5
MySQL позволяет использовать предложение INNER JOIN в операторе DELETE для удаления строк из таблицы и соответствующих строк в другой таблице.
Например, чтобы удалить строки из таблиц T1 и T2, которые удовлетворяют указанному условию, используйте следующий оператор:
DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;
Обратите внимание, что вы помещаете имена таблиц T1 и T2 между ключевыми словами DELETE и FROM. Если вы опустите таблицу T1, инструкция DELETE удалит только строки в таблице T2. Точно так же, если вы опускаете таблицу T2, оператор DELETE удалит только строки в таблице T1.
Надеюсь, это поможет.