MonetDB 中的 SQL UPDATE-with-Join

问题描述

我使用的是 monetdb 11.33.3(2019 年 4 月版)。我想更新某个表中的记录,使用另一个表中的相应值。

具体来说,例如,假设 table1col1col3 列,table2col2col4 列。假设有一个table1.col3 的值到 table2.col4 的单射映射(这样当我们对这些列进行等值连接时,我们最多得到一个匹配项)。我想将 table1.col1 设置为相应的 table2.col3 值 - 从 table2 中的单个匹配记录(使用我刚刚提到的 equi-join)。

这是我尝试的查询

WITH t2 AS (SELECT * FROM table2)
UPDATE 
table1
SET
col1 = t2.col2
WHERE
col3 = t2.col4
;

这给了我:

SELECT: identifier 'col1' unkNown

我不明白为什么我会收到这个特定的错误,因此不明白我犯了什么错误或如何修复查询

解决方法

尝试使用相关子查询:

UPDATE table1
    SET col1 = (SELECT t2.col2 FROM table2 t2 WHERE table1.col3 = t2.col4)
     WHERE EXISTS (SELECT 1 FROM table2 t2 WHERE table1.col3 = t2.col4);
,

这看起来像是已修复的错误。我尝试了 2019 年 11 月的版本,但没有出现错误。