来自OUTER JOINed表或派生表的UPDATE查询

时间:2010-12-30 01:23:39

标签: database ms-access

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

3 个答案:

答案 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。

也许你可以解释一下你试图用这个查询做什么?