【问题标题】:Delete a record when no corresponding record exists in first table当第一个表中不存在对应记录时删除一条记录
【发布时间】:2013-08-22 04:20:27
【问题描述】:

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

我希望有一种方法可以通过查询而不是编码来填充数据表并通过每个记录进行交互以查看是否有匹配项。

表A

keyID, 外国身份证, 文字

表B

keyID, 记录ID, 文字

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数据库。

【问题讨论】:

  • 请给我们展示表结构的例子,如果您不想共享信息,可以添加一些虚拟数据。您的问题没有包含足够的说明,无法让任何人回答您。你也想问一下吗?
  • access 有一个内置的“查找悬空记录”选项可以为您执行此操作...

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


【解决方案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 值匹配。” 你想识别@987654326 @ 计数为零的行。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2013-01-30
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多