2011-02-08 142 views
0

我目前的問題如下。 下面的選擇腳本完美地工作。刪除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 

orderheader表內的DateCreated字段是DATETIME類型。

我試圖刪除每個訂單更新,然後1-2-2011(d-m-y)以及訂購人關聯的表數據在orderbody和orderbodylocation表中。

我已經用完了想法,而且我還沒有太多有關MySQL DateTime數據類型字段的經驗。 如果任何人都可以看到我的錯誤,將不勝感激,如果你可以讓我知道我做錯了什麼。

+0

什麼是錯誤? – 2011-02-08 02:06:46

+2

[offtop]當外鍵約束與刪除級聯是一個很好的工具[/ offtop] – zerkms 2011-02-08 02:11:18

回答

0

發佈錯誤消息會很有幫助!

我不知道mysql,但如果它像其他SQL一樣,不能在DELETE命令的FROM子句中引用多個表。

如果您有級聯刪除屬性的外鍵,那麼只需刪除標題行,其餘的將自動刪除。

如果您沒有爲相關表設置級聯刪除,那麼您將需要執行3 刪除語句,從下往上刪除數據。對於較低級別的表,您將需要使用子選擇來匹配表頭。以下是適用於順序體的示例:

DELETE FROM orderbody其中orderbody.OrderID在(選擇orderHeader.OrderID FROM orderheader WHERE orderheader.DateCreated> '2011-02-01 00:00:00' AND orderheader.Status < = 1)

HTH

利奧

1

如果手冊頁到zerkms都禮貌張貼鏈接適用於您的MySQL版本,那麼你只需要添加(再次)表( s)你想從刪除指令。你需要把它們放在DELETEFROM之間,像這樣:

DELETE table1, table2, ... /* probably some or all tables in the FROM list */ 
FROM orderheader, orderbody, orderbodylocation 
...