【发布时间】:2015-11-17 20:16:45
【问题描述】:
这是我在 MS Access 2007 中的不可更新查询:
SELECT [OnlineDirectory].BC_SPEC2
FROM [OnlineDirectory] INNER JOIN Certifs_ABMS
ON [OnlineDirectory].ThisID = Certifs_ABMS.ThisID;
OnlineDirectory 和 Certifs_ABMS:
- 是具有主键索引的本地表。
- 在字段
ThisID上有索引(“可以重复”)。
查询
- 记录集类型为
dynaset。 - 没有记录锁。
这些都是可更新的:
SELECT * FROM [OnlineDirectory]
SELECT * FROM [Certifs_ABMS]
我已经查看了 Allen Browne 的 famous list of hazards,但没有一个适用。 更新:不正确。查看已接受的答案。
我很高兴按照建议的here 添加DISTINCTROW,但没有成功。
如何使此查询可更新?
【问题讨论】:
-
这个可以更新吗?
SELECT o.BC_SPEC2 FROM OnlineDirectory AS o WHERE o.ThisID IN (SELECT DISTINCT ThisID FROM Certifs_ABMS); -
是的,这是可更新的。我读到了这种事情,但无法申请。我的 actual 查询有两个连接,这有点像我对 SQL 的深入了解所产生的头痛。不要抱怨。
-
如果 2 个字段而不仅仅是
ThisID,那么EXISTS方法怎么样?SELECT o.BC_SPEC2 FROM OnlineDirectory AS o WHERE EXISTS (SELECT 1 FROM Certifs_ABMS AS c WHERE c.ThisID = o.ThisID AND c.OtherField = o.OtherField); -
我发现“规范”表——没有收到更新的表——能够采用复合主键(这让我感到惊讶,我认为数据不够干净)。现在可以更新了。我相信@HansUp 的 SQL-fu 也可能是可行的,但我不确定我是否能够对其进行测试。