MS Access SQL 正在删除基于外部的记录 table

MS Access SQL Deleting record based on external table

关于根据外部 table(在未链接的 table 中选择记录),我有一个类似的问题:

这次我尝试根据[=29]中的条件删除内部table中的记录=]外部一个。

Private Sub Command0_Click()
    Dim SQLstring As String
    SQLstring = "Delete * FROM Testtable1 AS tnf WHERE ([Network Location].[Testtable2].[Customers] = tnf.[Customers]) AND ([Network Location].[Testtable2].[Contract] = '2003') Or ([Network Location].[Testtable2].[Active]='N');"
    DoCmd.RunSQL (SQLstring)
End Sub

它告诉我 " 不是一个有效的名称并检查是否有无效的字符或标点符号或者它是否太长。我找不到任何关于 SQL 长度的内容,但我很确定这不会太长。

关于我的 SQl 声明,我是否遗漏了什么?我已经一遍又一遍地检查它,但没有发现任何问题。

WHERE 子句应该有一个 Exists (Select) 子句吗?

我是不是漏掉了什么?

由于delete 查询一次只能从一个table 中删除记录,因此在from 子句中只能引用一个数据集。对于您当前的查询,您需要在 from 子句中引用 testtable2,这将导致无效的 delete 查询。

因此,您需要将 where exists 与子查询一起使用,例如:

delete from testtable1 as t1
where exists 
(
    select 1 from [Network Location].[Testtable2] t2 
    where t2.customers = t1.customers and (t2.contract = '2003' or t2.active = 'N')
)

我还用括号将 or 表达式括起来,因为我假设删除具有匹配 customers 记录和其他两个条件之一的记录是所需的逻辑,而不是比删除 任何 t2.active = 'N' 记录(因为 and 的运算符优先于 or)。