我正在尝试使用内部联接从另一个表更新Redshift中的表。
查询:
UPDATE target
INNER JOIN updates ON target.name = updates.name and target.title = updates.title and target.age = updates.age
SET target.num_hit_ratio = updates.num_hit_ratio, target.plan_id = updates.plan_id;
这是错误的:
“INNER”或其附近的语法错误
我在哪里弄错了?
答案 0 :(得分:3)
如Redshift documentation中所述,UPDATE可以连接到其他表以在SET命令中生成值,但是连接语法采用WHERE子句谓词的形式(非显式JOIN语法)。 / p>
UPDATE target
SET target.num_hit_ratio = updates.num_hit_ratio,
target.plan_id = updates.plan_id
FROM updates
WHERE target.name = updates.name
AND target.title = updates.title
AND target.age = updates.age
注意这个替代WHERE子句的语法,删除AND关键字并用括号括起条件:
...
WHERE
(target.name, target.title, target.age)
=
(updates.name, updates.title, updates.age)
答案 1 :(得分:0)
您也可以使用别名,这样您的联接就更多了 可读:
UPDATE t
SET ...
FROM target t
INNER JOIN updates u ON t.name = u.name AND t.title = u.title AND t.age = u.age
答案 2 :(得分:0)
使用您的查询,您只需重新排列以下内容:
UPDATE
target
SET
target.num_hit_ratio = updates.num_hit_ratio, target.plan_id = updates.plan_id
FROM
target
JOIN updates ON target.name = updates.name AND target.title = updates.title AND target.age = updates.age
我个人会给你的表别名,以便更容易打字(因为我懒惰:P):
UPDATE
T
SET
num_hit_ratio = U.num_hit_ratio,
plan_id = U.plan_id
FROM
target T
JOIN updates U ON T.name = U.name AND T.title = U.title AND T.age = U.age