【问题标题】:Delete record with query and inner join使用查询和内部联接删除访问记录
【发布时间】:2021-09-09 06:45:52
【问题描述】:

我是 VBA 新手,想从表 PLTotals 中删除所有条目,其中 Total_Row_ID 列与另一个表 PLLabelsAndFormulas 中的 ID 列匹配

**PLTotals** TABLE

ID,       Total_Row_ID,      Member_Row_ID



**PLLabelsAndFormulas** TABLE

ID,       Company_ID,        Row_Label,       etc....

据我了解,我可以使用 INNER JOIN 来做到这一点,但我尝试过的一切都失败了。

首先我尝试了这个:

Dim accessQuery as string

accessQuery = "DELETE PLTotalsRows.ID FROM PLTotalsRows " & _
              "LEFT JOIN PLLabelsAndFormulas ON PLTotalsRows.Total_Row_ID = PLLabelsAndFormulas.ID " & _
              "WHERE PLLabelsAndFormulas.Company_ID = " & companyId

这样我得到了错误:

需要指定要删除的表

我也试过这个:

accessQuery = "DELETE PLTotalsRows.* FROM PLTotalsRows WHERE " & _
              "EXISTS (SELECT [ID] FROM PLLabelsAndFormulas WHERE PLLabelsAndFormulas.ID = PLTotalsRows.Member_Row_ID) = True"

第二个没有报错,但是记录没有被删除。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 表是 PLTotals 还是 PLTotalsRows? Member_Row_ID 是 ID 主键的外键链接吗?还是 Total_Row_ID 是外键?编辑问题以将示例数据显示为文本表。试试 IN():"DELETE FROM PLTotalsRows WHERE Member_Row_ID IN (SELECT ID FROM PLLabelsAndFormulas WHERE PLLabelsAndFormulas.Company_ID =" & companyID & ")"
  • 或者应该是Total_Row_ID IN (...)

标签: sql vba ms-access join


【解决方案1】:

考虑使用别名将外层与EXISTS 子查询相关联。

DELETE t.* 
FROM PLTotalsRows t
WHERE EXISTS (
    SELECT 1 
    FROM PLLabelsAndFormulas 
    WHERE PLLabelsAndFormulas.ID = t.Member_Row_ID
)

或者,您可以使用IN 子查询:

DELETE t.* 
FROM PLTotalsRows t
WHERE t.Member_Row_ID IN (
    SELECT [ID] 
    FROM PLLabelsAndFormulas 
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 2021-01-04
    • 2017-05-08
    • 2017-12-22
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多