2016-07-08 1 views
0

У меня есть таблица базы данных, называемая «заказ», которая ссылается на другую таблицу с именем «доставка» через внешний ключ. Мне нужно удалить доставки, измененные до определенной даты, но я не могу сделать это, пока не удалю заказы, ссылающиеся на них.Удаление из одной таблицы, где поле на внешнем ключе меньше значения в MySQL

Поэтому мне нужно удалить заказы, в которых поставки были изменены до определенной даты. Я написал следующий запрос в MySQL:

DELETE FROM `order`,`delivery` WHERE order.delivery_id = delivery.id AND delivery.modifiedOn < '2016-2-28 23:59:59' 

Но я получаю ошибку SQL:

1064 - у Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом: «WHERE order.delivery_id = delivery.id AND delivery.modifiedOn < '2016-'

Я не делал такого рода запрос до , Я подозреваю, что мне нужно использовать JOIN где-нибудь, но не знаю, где - любой совет будет оценен.

+0

Возможные дубликат [Как удалить из нескольких таблиц в MySQL?] (Http://stackoverflow.com/questions/3331992/how-to-delete-from-multiple-tables-in-mysql) – Drew

+0

Так , просто примите двойную выноску в верхней части вашего вопроса, если хотите (для удаления нескольких таблиц, если это ваша ситуация, и я не уверен, что это так) – Drew

+0

Jamie, следующий пример простого каскадного удаления [здесь] (http://stackoverflow.com/a/32298405) ... примерно половина пути ответа - пример – Drew

ответ

1

Это синтаксис вы ищете:

DELETE o, d 
    FROM `order` o JOIN 
     `delivery` d 
     ON o.delivery_id = d.id 
    WHERE d.modifiedOn < '2016-02-29'; 

Примечания:

  • Не называйте таблицу order. Это зарезервированное слово в MySQL и ключевое слово в SQL. Как насчет Orders?
  • Научитесь использовать правильный JOIN синтаксис, даже в не-SELECT запросах.
  • Табличные псевдонимы облегчают запись и чтение.
  • Нет необходимости включать HH: MM: SS для сравнения времени.
  • Вы понимаете, что в феврале 2016 года на самом деле было 29 дней?
  • Наконец, каскадное удаление ссылок на внешние ключи упростит обработку.
+0

Спасибо, Гордон, можете ли вы объяснить, что вы подразумеваете под каскадным удалением внешних ключей? – JamiePatt

+0

http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html. , , Конкретный синтаксис - 'on delete cascade'. –

Смежные вопросы