在第一个表中不存在相应记录时删除记录

时间:2013-08-21 19:28:41

标签: vb.net ms-access ms-access-2010

如何从表中删除不匹配的行?我有两张表,其中包含大部分相关记录。表A必须存在于表B中。如果表A中不存在表B记录,则删除表B记录。

我希望有一种方法可以通过查询来执行此操作,而不是编码以填充数据表并通过每个reocrd进行交互以查看是否存在匹配。

表A

KEYID, foreignID, 文本

表B

KEYID, 的recordId, 文本

foriegnID和recordID是相关字段。我没有设计这些表格。

有些喜欢这样......

DELETE * FROM TableB WHERE (SELECT [foreignID] FROM TableA) <> recordID;

更新:我可以退出需要通过查询删除的记录,但我想删除它们。

SELECT * FROM TableA LEFT JOIN TableB ON TableA.[foreignID] = TableB.[recordID] WHERE (((TableB.recordID) Is Null));

我正在使用vb.net来处理一系列Access数据库。

1 个答案:

答案 0 :(得分:1)

您可以在Access SQL中使用DCount Function,无论查询是在Access会话中运行还是从VB.Net或其他客户端代码外部运行,它都能正常工作。

SELECT查询开始,确认其定位的是正确的TableB行。

SELECT b.*
FROM TableB AS b
WHERE DCount("*", "TableA", "foreignID =" & b.recordID) = 0;

在人类语言中,DCount表达式意味着“给我TableA行的计数,其中foreignID值与当前TableB行的recordID值匹配。”您想要识别该计数为零的TableB行。

注意我假设了foreignIDrecordID的数字数据类型。如果它们是文本,则必须将b.recordID的值括在引号中。

当您准备好触发触发器时,转换为DELETE查询。

DELETE
FROM TableB AS b
WHERE DCount("*", "TableA", "foreignID =" & b.recordID) = 0;