Удалить запрос mysql

Моя текущая проблема заключается в следующем. Приведенный ниже сценарий выбора работает отлично.

SELECT * 
FROM orderheader, orderbody, orderbodylocation
WHERE orderheader.DateCreated > '2011-02-01 00:00:00' 
AND orderheader.OrderID = orderbody.OrderID 
AND orderbody.OrderBodyID = orderbodylocation.OrderBodyID 
AND orderbody.OrderID = orderbodylocation.OrderID 
AND orderheader.Status <= 1

но приведенный ниже запрос на удаление, который является дублированием предложений where, не работает с предложением dateCreated.

DELETE 
FROM orderheader, orderbody, orderbodylocation
WHERE orderheader.DateCreated > '2011-02-01 00:00:00' 
AND orderheader.OrderID = orderbody.OrderID 
AND orderbody.OrderBodyID = orderbodylocation.OrderBodyID 
AND orderbody.OrderID = orderbodylocation.OrderID 
AND orderheader.Status <= 1

Поле DateCreated в таблице заголовков заказов имеет тип DATETIME.

Я пытаюсь удалить каждый заказ новее, чем 1-2-2011 (д-м-г) вместе с данными таблицы, связанными с заголовками заказов, в таблицах orderbody и orderbodylocation.

У меня закончились идеи, и у меня не было большого опыта работы с полями типа данных mysql DateTime. Если кто-нибудь увидит мою ошибку, я был бы очень признателен, если бы вы могли сообщить мне, что я сделал неправильно.


person roguecoder    schedule 08.02.2011    source источник
comment
[offtop]Это замечательный случай, когда ограничение внешних ключей с каскадным удалением является отличным инструментом для использования[/offtop]   -  person zerkms    schedule 08.02.2011
comment
#1064 - У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с «WHERE orderheader.DateCreated» '2011-02-01 00:00:00' AND orderheader.OrderID ' в строке 3   -  person roguecoder    schedule 08.02.2011
comment
@roguecoder: на какой версии mysql вы это запускаете?   -  person zerkms    schedule 08.02.2011
comment
@zerkms: mysqlnd 5.0.5-dev - 081106 - $ Редакция: 1.3.2.27 $   -  person roguecoder    schedule 08.02.2011
comment
@roguecoder: 1) он даже не был выпущен, вы используете нестабильную версию для разработки 2) если он был выпущен - это будет май 2005 года, а сегодня 2011 год. Я настоятельно рекомендую вам обновиться до 5.0.91   -  person zerkms    schedule 08.02.2011
comment
Я установил последнюю версию wamp, и вот что получилось, лол!   -  person roguecoder    schedule 08.02.2011
comment
@roguecoder: wampserver.com/en --- вы уверены? Mysql 5.1.53 (version 64 bits); Mysql 5.5.8 (version 32 bits)   -  person zerkms    schedule 08.02.2011
comment
@zerkms: подождите, я думаю, что вытащил номер версии не из той области. Версия сервера: 5.1.36-community-log звучит лучше?   -  person roguecoder    schedule 08.02.2011
comment
@roguecoder: конечно. Но теперь у меня нет никаких идей о том, почему у вас возникает такая ошибка. Я не вижу никакой ошибки.   -  person zerkms    schedule 08.02.2011
comment
@roguecoder: единственный способ, которым я могу думать о такой ошибке для такого запроса на удаление, заключается в том, что у вас есть недопустимый невидимый символ прямо перед where (между from таблицы и предложение where), так что, если вы удалите все новые строки и пробелы между orderbodylocation и WHERE и снова поставить один пробел (не новую строку)?   -  person zerkms    schedule 08.02.2011
comment
@zerkms: лол, ладно. ну все равно спасибо за помощь.   -  person roguecoder    schedule 08.02.2011
comment
@roguecoder: ваша ирония понятна, но это может быть возможной проблемой ;-)   -  person zerkms    schedule 08.02.2011
comment
нет ничего там, что не должно быть там   -  person roguecoder    schedule 08.02.2011
comment
@zerkms: в любом случае это спасибо было ответом на комментарий, в котором я не вижу никаких ошибок. :) Кстати, я ценю помощь. здесь нет сарказма. я удалил все пробелы и вернул их и удалил новые строки. кажется, ничего не работает, и я уверен, что делал это один или два раза раньше для университета несколько лет назад   -  person roguecoder    schedule 08.02.2011


Ответы (2)


Если справочная страница, на которую zerkms любезно разместил ссылку, относится к вашей версии MySQL, то вам просто нужно добавить (еще раз) таблицы, из которых вы хотите удалить, в инструкцию DELETE. Вам нужно поместить их между DELETE и FROM, вот так:

DELETE table1, table2, ... /* probably some or all tables in the FROM list */
FROM orderheader, orderbody, orderbodylocation
...
person Andriy M    schedule 08.02.2011

Размещение сообщения об ошибке было бы полезно!

Я не знаю mysql, но если это похоже на другие SQL, вы не можете ссылаться на несколько таблиц в предложении FROM команды DELETE.

Если у вас есть внешние ключи со свойством каскадного удаления, просто удалите строки заголовков, а остальные будут автоматически удалены.

Если у вас не настроено каскадное удаление для связанных таблиц, вам нужно будет выполнить 3 оператора удаления, удаляя данные снизу вверх. Для таблиц более низкого уровня вам нужно будет использовать дополнительный выбор для сопоставления с таблицей заголовков. Вот пример тела заказа:

УДАЛИТЬ ИЗ orderbody, где orderbody.OrderID в (выберите orderHeader.OrderID FROM orderheader WHERE orderheader.DateCreated > '2011-02-01 00:00:00' AND orderheader.Status ‹= 1)

ХТН

Лео

person Elroy Flynn    schedule 08.02.2011