2017-10-16 72 views
0

這是在MS Access我的SQL代碼:如何在ms訪問中刪除兩個表中的匹配行?

DELETE Table1.* 
FROM Table1 
INNER JOIN Table2 ON Table1.Field1 = Table2.Field1 

我想在這裏注意到,表1有許多列,但表2只是一列。 我想刪除Table1中的所有行,其中Table1.Field1 = Table2.Field1。 但是,當我執行代碼時,我得到這個錯誤:無法從指定的表中刪除。

但是,如果我使用的SELECT代替DELETE它工作正常顯示行:

SELECT Table1.* 
FROM Table1 
INNER JOIN Table2 ON Table1.Field1 = Table2.Field1 

但我想刪除這些行。

+0

我,如果你想知道」我已經在表上獲得了某種鎖定(對所有記錄實際鎖定,或者沒有級聯刪除的多對多關係) - SQL應該可以工作(並且當我測試它時)。 https://support.office.com/zh-CN/article/I-get-the-error-message-Could-not-delete-from-the-specified-tables-20dec5e8-5402-4667-802d-523cf4923a46 –

回答

0

我會選擇行的ID行到輔助表中。 然後

delete from Table1 where table1.rowid = helpertable.rowid; 

然後

delete from Table2 where table2.rowid = helpertable.rowid; 

然後

drop helpertable; 
+0

對不起,這不起作用,因爲我想刪除兩個表之間的所有匹配行。 –

+0

Err ...你沒有加入'table2',所以肯定會失敗 –

+0

我是ms access的初學者,所以這個代碼工作的解決方案是什麼? DELETE Table1。* FROM Table1 INNER JOIN Table2 ON Table1.Field1 = Table2.Field1 –

0

訪問連接在操作查詢字段時,有奇怪的問題。

請嘗試以下方法避免加入:

DELETE * 
FROM Table1 
WHERE DCount('Field1', 'Table2', 'Field1 = "' & Field1 & '"') <> 0 
2

考慮一個子查詢。 DELETE MS Access中的查詢應該具有刪除行集作爲完整的獨立結果集。在你嘗試的結果集是兩個表,即使您只查看第一與SELECT子句:

DELETE Table1.* 
FROM Table1 
WHERE Field1 IN (SELECT Field1 FROM Table2) 

和調整,以ANSI,不需要星號:

DELETE FROM Table1 
WHERE Field1 IN (SELECT Field1 FROM Table2)