2011-01-26 97 views
2

使用以下數據,我試圖從兩個表中刪除匹配的記錄。從Access 2007中的多個表中刪除記錄

水果

ID值
1蘋果
2梨
3香蕉
4葡萄

動物

ID值
1熊
2猴
3鴨PLE
4豬

有這兩個表之間沒有定義的關係。

由於「蘋果」出現在兩張表中,我想從每張表中刪除這條記錄。

我試過下面的查詢來實現:

DELETE DISTINCTROW Animals.*, Fruits.* 
FROM Animals INNER JOIN Fruits ON Animals.Value = Fruits.Value; 

然而,當我運行它,我收到以下錯誤:

Could not delete from specified tables.

什麼我做錯了,什麼我能解決這個問題嗎?

回答

4

如果沒有建立關係以利用級聯刪除,那麼您的運氣不好。 DELETE語句一次只能在一個表上執行(在後臺執行級聯刪除,如果有的話)。你別無選擇,只能設計一些東西來實現你想要的。也許,通過宏觀,一個可以做一些簡單的像這樣:

UPDATE Animals, Fruits SET Animals.Value="DELETED", Fruits.Value="DELETED" WHERE Animals.Value=Fruits.Value 
DELETE Animals WHERE Animals.Value="DELETED" 
DELETE Fruits WHERE Fruits.Value="DELETED" 

短片製作精良的VBA宏(也許是臨時表),這是因爲它得到一樣好。另外,我不相信即使使用更重型的數據庫(如SQL Server或DB2)也可以完成這項工作;子查詢或視圖上的DELETE仍然要求數據庫系統可以將其解析爲特定的表。

我會猜測你得到的錯誤是鎖定行的問題(作爲INNER JOIN的結果)。

+0

我不知道任何DBMS可以在單個語句中執行此操作(禁止級聯刪除或觸發器,這是不同形式的後續影響,不適用於語句的部分)。 – RolandTumble 2011-01-26 18:29:52