У меня есть две таблицы, одна для сроков работы, одна для описания работы. Каждое задание может иметь статус, а некоторые статусы означают, что сроки выполнения заданий должны быть удалены из другой таблицы.
Я могу легко 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
ON deadline.job_id = job.job_id WHEREstatus
=' szaml 'в строке 1
Как я могу превратить мой SELECT
в рабочий DELETE
запрос?
источник
DELETE
иFROM
, но запрос все равно работал нормально, когда я нажимал Go.Если вы используете «таблица как», укажите ее для удаления.
В этом примере я удаляю все строки таблицы_1, которых нет в таблице_2.
источник
Я не уверен, что подобный подзапрос работает в MySQL, но попробуйте. Я предполагаю, что у вас есть столбец ID в вашей таблице крайних сроков.
источник
DELETE
делать запрос однозначным. ИспользованиеIn
с подзапросами делает все намного медленнее. Лучше всего избегатьDELETE
иFROM
.Попробуй это:
источник
MySQL позволяет использовать предложение INNER JOIN в операторе DELETE для удаления строк из таблицы и соответствующих строк в другой таблице.
Например, чтобы удалить строки из таблиц T1 и T2, которые удовлетворяют указанному условию, используйте следующую инструкцию:
Обратите внимание, что вы помещаете имена таблиц T1 и T2 между ключевыми словами DELETE и FROM. Если вы опустите таблицу T1, оператор DELETE удалит только строки в таблице T2. Точно так же, если вы опустите таблицу T2, оператор DELETE удалит только строки в таблице T1.
Надеюсь, это поможет.
источник