MS-Access中是否有任何方法可以更新数据来自外部联接数据集或派生表的表?我知道如何在MSSQL中执行此操作,但在Access中我总是收到“操作必须使用可更新查询”错误。正在更新的表是可更新的,而源数据则不是。在阅读了错误后,Microsoft告诉我,当查询违反参照完整性时会导致错误。我可以保证这个数据集不会。尝试更新大型数据集时,此限制正在瘫痪。我还读到,可以通过启用级联更新来解决这个问题。如果我的表之间的这种关系仅在查询中定义,这是否可能?到目前为止,将数据集写入临时表,然后将内部连接到更新表是我唯一的解决方案;那令人难以置信的笨重。我想按照以下方式做点什么:
UPDATE Table1
LEFT JOIN Table2 ON Table1.Field1=Table2.Field1
WHERE Table2.Field1 IS Null
SET Table1.Field1= Table2.Field2
或
UPDATE Table1 INNER JOIN
(
SELECT Field1, Field2
FROM Table2, Table3
WHERE Field3=’Whatever’
) AS T2 ON Table1.Field1=T2.Field1
SET Table1.Field1= T2.Field2
答案 0 :(得分:1)
更新查询在Access中非常有问题,因为您已经发现了。
临时表的想法有时是你唯一的选择。
有时使用DISTINCTROW声明解决了问题(查询属性 - >唯一记录为'是'),值得尝试。
尝试的另一件事是在表上使用别名,这似乎也有助于JET引擎。
答案 1 :(得分:0)
UPDATE Table3
INNER JOIN
(Table1 INNER JOIN Table2 ON Table1.uid = Table2.uid)
ON
(Table3.uid = Table2.uid)
AND
(Table3.uid = Table1.uid)
SET
Table2.field=NULL;
我做的是: 1.创建了3个表 2.建立他们之间的关系 3.并使用查询构建器更新表2中的字段。
答案 2 :(得分:0)
查询逻辑中似乎存在问题。在你的第一个例子中,你在Field1上LEFT JOIN到Table2,但是然后有
Table2.Field1 IS NULL
WHERE子句中的。因此,这限制了您无法进行JOIN的记录。但是,尽管没有JOIN,但您尝试使用Table2中的数据更新表1。
也许你可以解释一下你试图用这个查询做什么?