2012-05-04 35 views
2

所以我必須有他們之間的關係表 - 關係類型:一對多。 ,我認爲以下查詢:如何從sql中的表中刪除行?

DELETE Orderstbl.*, ItemsInOrdertbl.* 
FROM Orderstbl INNER JOIN ItemsInOrdertbl ON Orderstbl.OrderID = ItemsInOrdertbl.OrderId 
WHERE (((Orderstbl.OrderID)=26)); 

將刪除包含訂單ID = 26 但讓我吃驚的是填補了以下錯誤兩個表中的所有行:

could not delete from specified tables 

試圖在谷歌上找到一個答案,提前沒有多大的幫助:D

+0

使用事務包裝作爲單獨的語句從多個表中刪除,否則使用級聯,但你需要混亂表關係 –

回答

1

你也可以創建一個關係,其中包括CASCADE DELETE,然後當你從一個刪除它將從另一個刪除

microsoft

如果選擇級聯刪除相關記錄複選框,當你 定義的關係,你在主 表中刪除記錄時,Microsoft Access將自動刪除相關記錄 相關表格。例如,如果您從 客戶表中刪除客戶記錄,則所有客戶的訂單將自動從訂單表中刪除 (這包括與訂單記錄相關的訂單明細表 表中的記錄)。當刪除 表單或數據表中的記錄並選中級聯刪除相關記錄複選框 時,Microsoft Access會警告您相關記錄可能也會被刪除 。但是,使用刪除查詢刪除記錄時, Microsoft Access會自動刪除相關表 中的記錄而不顯示警告。

使用CASCADE DELETE是一種簡單而乾淨的方法,可以確保從兩個表中刪除正確的記錄。

這是另一篇文章,討論使用MS-Access的CASCADE DELETE。

Delete one or more records from an Access database

+0

謝謝一堆! :d –

0

如果你有兩個表列之間的外鍵設置,你必須要確定要刪除的子列第一,然後主人。這樣做的正確方法是在刪除主設備時設置約束,如UPDATE或DELETE。約束關注外鍵關係,所以你永遠不會收到遍佈整個地方的孤行行。

在MySQL中(例如)創建約束...

[CONSTRAINT [symbol]] FOREIGN KEY 
    [index_name] (index_col_name, ...) 
    REFERENCES tbl_name (index_col_name,...) 
    [ON DELETE reference_option] 
    [ON UPDATE reference_option] 

另一種選擇是做編程,先刪除在子錶行,然後主人。