如何从表中删除不匹配的行?我有两张表,其中包含大部分相关记录。表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数据库。
答案 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
行。
注意我假设了foreignID
和recordID
的数字数据类型。如果它们是文本,则必须将b.recordID
的值括在引号中。
当您准备好触发触发器时,转换为DELETE
查询。
DELETE
FROM TableB AS b
WHERE DCount("*", "TableA", "foreignID =" & b.recordID) = 0;