我无法使跟随删除查询生效(ms access 2007)
DELETE FROM T_Value b
INNER JOIN T_Value AS a ON b.MeasTime = a.MeasTime
AND b.JobId = a.JobId
WHERE b.DataId > a.DataId
查询的目的是有效地删除重复的条目。 DataId是表单个主键。通过比较MeasTime和JobId字段确定重复条目。
Access返回消息指定包含您要删除的记录的表。任何帮助将不胜感激。
答案 0 :(得分:1)
当您加入这两个表时,您可以创建一些关于要删除的内容的歧义,例如,第一个表中的行可能在第二个表中有许多匹配项。一旦加入,联接表中的第一个表将有许多行的副本,当您尝试使用连接的表从第一个表中删除条目时,这会混淆Access。
有几种解决方案:
1)使用DistinctRow:这将停止上一个问题,因为这意味着联接表中的每一行都是唯一的,可以防止上一个问题:
DELETE DISTINCTROW b.* FROM T_Value b
INNER JOIN T_Value AS a ON b.MeasTime = a.MeasTime
AND b.JobId = a.JobId
WHERE b.DataId > a.DataId
2)使用子查询:虽然子查询可能很慢,但这可以防止结果出现任何歧义,并且您不必删除重复的行:
DELETE b.* FROM T_Value b
WHERE b.DataId > a.DataId
AND EXISTS ( SELECT 1 FROM T_Value WHERE MeasTime = b.MeasTime )
AND EXISTS ( SELECT 1 FROM T_Value WHERE JobId = b.JobId )