如何在ms访问中删除两个表中的匹配行?

问题描述:

这是在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 –

我会选择行的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 –

访问连接在操作查询字段时,有奇怪的问题。

请尝试以下方法避免加入:

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

考虑一个子查询。 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)