2016-07-08 58 views
0

我有一个名为'order'的数据库表,它通过一个外键引用另一个名为'delivery'的表。我需要删除某个日期之前修改的交付,但是我不能这样做,直到我删除引用它们的订单。从一个表中删除一个外键上的字段小于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,以下是级联删除的一个简单示例[Here] (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年2月实际上有29天?
  • 最后,级联删除外键引用将简化处理。
+0

谢谢戈登,你可以解释你的意思是级联删除外键? – JamiePatt

+0

http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html。 。 。具体的语法是“在删除级联”。 –

相关问题