DBeaver 中使用 UPDATE 从同一数据库中的表 2 更新表 1 的问题

问题描述 投票:0回答:1

我的数据库位于 MS Access 中,可以通过 UCanAccess 驱动程序访问 DBeaver,它包含两个表,我将其称为

Table1
Table2
。我想根据
Table1
中的条目更新
Table2
,并且我尝试了在 StackOverflow 中找到的内容的许多变体,包括:

UPDATE [Table1]
SET [Table1].[Column1] = [Table2].[ThingsToUpdateTo]
WHERE [Table1].[Column2] = [Table2].[Reference];

我收到错误:

SQL 错误 [42501]:UCAExc:::5.0.1 用户缺乏权限或未找到对象:

[Table2].[ThingsToUpdateTo]

我尝试仅在 SET 行中使用 SELECT 语句,这会在下一行中给出相同的错误,并且我尝试在 SET 和 WHERE 中使用 SELECT 语句。我还尝试将

[Table1]
[Table2]
放在 UPDATE 行中。

我觉得一定有一些非常简单的东西我遗漏了,导致我的声明无法引用

Table2
来更新
Table1
。预先感谢!

我尝试仅在 SET 行中使用 SELECT 语句,这会在下一行中给出相同的错误,并且我尝试在 SET 和 WHERE 中使用 SELECT 语句。我还尝试将

[Table1]
[Table2]
放在 UPDATE 行中。这些解决了“用户缺乏权限”类型错误并引发“基数违规”错误。

尝试过

UPDATE Table1 
INNER JOIN Table2 ON Table1.Column2 = Table2.Reference 
SET Table1.Column1 = Table2.ThingsToUpdateTo;

这确实尝试更新记录,但我收到另一个错误:

意外令牌:需要 INNER:SET

我也尝试过:

UPDATE Table1
SET Column1 = Table2.ThingSToUpdateTo
FROM Table1 
JOIN Table2 ON t1.Column2 = t2.Reference;

也尝试更新记录,但出现错误:

用户缺乏权限或未找到对象:t2.ThingsToUpdateTo

我还尝试在 Access 而不是 DBeaver 中运行所有这些查询,但没有成功。

sql ms-access dbeaver ucanaccess
1个回答
0
投票

正如 Erik 在对该问题的评论中提到的,UCanAccess 不使用 Access 数据库引擎。它使用 HSQLDB 处理 SQL 命令,并使用 Jackcess 将更改写回 Access 数据库文件。

因此,我们需要使用 ANSI 标准语法,而不是使用 Access 的非标准 UPDATE … JOIN 语法

UPDATE Table1 t1
SET Column1 = (
    SELECT t2.ThingsToUpdateTo FROM Table2 t2
    WHERE t1.Column2 = t2.Reference
    )
© www.soinside.com 2019 - 2024. All rights reserved.