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

Надеюсь, это поможет.