MS-Access 2010 DELETE查询LEFT JOIN

时间:2016-09-30 10:46:28

标签: ms-access ms-access-2010

网上有很多这样的问题都有很多解决方案,但是我真的很难解决这个问题。

我有一张表[BaseHrs]看起来有点像这样 -

p_ID  b_Person  WeekNos  HrsRequired
1     A         2016-39  10
1     A         2016-40  10
1     A         2016-41  10
1     A         2016-42  10
1     B         2016-39  11
1     B         2016-40  11
1     B         2016-41  12
1     B         2016-42  09

表继续使用不同的p_ID,人和&周数。没有主键,也没有索引。该表也与任何其他表无关。

它是从连接到另一个表的查询以及[HrsRequired]字段的表单填充的。

情景 - 项目1(p_ID = 1)现已提前两周,BaseHrs表不再需要[WeekNos] 2016-41& 2016-42。

我最初使用查询来显示项目正在运行的周(qry_SelectNewDates)。

我已经开始删除查询,首先创建一个如下所示的选择查询 -

SELECT BaseHrs.*
FROM BaseHrs 
LEFT JOIN qry_SelectNewDates 
    ON BaseHrs.WeekNos = qry_SelectNewDates.WeekNos
    WHERE (((BaseHrs.p_ID)=[Forms]![frm_Projects]![p_ID]) 
        AND ((BaseHrs.WeekNos) Not In ([qry_SelectNewDates].[WeekNos])));

这可以按预期工作。

将其转换为删除查询会产生错误。删除查询 -

DELETE BaseHrs.*, BaseHrs.p_ID, BaseHrs.WeekNos
FROM BaseHrs 
LEFT JOIN qry_SelectNewDates 
ON BaseHrs.WeekNos = qry_SelectNewDates.WeekNos
WHERE (((BaseHrs.p_ID)=[Forms]![frm_Projects]![p_ID]) 
AND ((BaseHrs.WeekNos) Not In ([qry_SelectNewDates].[WeekNos])));

错误讯息 -

  

无法从指定的表中删除。

我意识到尝试以这种方式删除记录时经常会出现问题。我尝试在第一行使用'DELETE。*'而没有运气。

我也尝试过嵌套查询,但我无法弄清楚如何构造它。有什么指导吗?

********** EDIT **********

根据@ SunKnight0的建议,我已经为我的BaseHrs表添加了一个主键并得到了这个查询 -

DELETE *
FROM BaseHrs
WHERE b_pKey IN
   (SELECT BaseHrs.b_pKey
    FROM BaseHrs 
    LEFT JOIN qry_SelectNewDates 
        ON (BaseHrs.WeekNos = qry_SelectNewDates.WeekNos)
    WHERE (((BaseHrs.p_ID)=[Forms]![frm_Projects]![p_ID]) 
        AND ((BaseHrs.WeekNos) Not In ([qry_SelectNewDates].[WeekNos]))));

此查询似乎有效,但需要花费大量时间才能运行。那是不是很好?

0 个答案:

没有答案