2016-07-08 36 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。 。 。具體的語法是「在刪除級聯」。 –

相關問題