网上有很多这样的问题都有很多解决方案,但是我真的很难解决这个问题。
我有一张表[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]))));
此查询似乎有效,但需要花费大量时间才能运行。那是不是很好?