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

时间:2017-10-16 10:33:42

标签: sql ms-access access-vba

这是我在ms访问中的sql代码:

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

我想在这里注意到Table1有很多列,但Table2只有一列。 我想删除Table1中Table1.Field1 = Table2.Field1所有的行。 但是当我执行代码时,我收到此错误:无法从指定的表中删除。

但是,如果我使用SELECT代替DELETE,则可以正常显示行:

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

但我想删除这些行。

3 个答案:

答案 0 :(得分:2)

考虑一个子查询。 MS Access中的DELETE个查询应该将删除行集作为完整的独立结果集。在您的尝试中,结果集是两个表,即使您只查看带有SELECT子句的第一个:

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

与ANSI对齐,不需要星号:

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

答案 1 :(得分:0)

我会选择将行的行ID选择为帮助程序表。 然后

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

然后

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

然后

drop helpertable;

答案 2 :(得分:0)

在操作查询中加入字段时,Access存在奇怪的问题。

请尝试以下操作以避免加入:

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