gpt4 book ai didi

sql - Vertica UPDATE 语句中使用了哪种联接?

转载 作者:行者123 更新时间:2023-12-04 14:24:05 25 4
gpt4 key购买 nike

Vertica 在基于连接值更新表时有一个有趣的更新语法。它不使用连接来查找更新行,而是强制使用如下语法:

UPDATE a
SET col = b.val
where a.id = b.id

(请注意,这种语法在这种情况下确实是强制性的,因为 Vertica 禁止我们使用包含“自联接”的 where 子句,即引用正在更新的表的联接,在本例中为 a。)

这种语法很好,但与其他 SQL 方言相比,它对所使用的连接不太明确。例如,在这种情况下会发生什么?
UPDATE a
SET col = CASE 0 if b.id IS NULL ELSE b.val END
where a.id = b.id

a.id 时会发生什么在 b.id 中没有匹配项?是否 a.col没有得到更新,好像条件 a.id = b.id表示 a 的内连接和 b ?或者它是否更新为零,就好像条件是左外连接一样?

最佳答案

我认为 Vertica 对这种语法使用 Postgres 标准:

UPDATE a
SET col = b.val
FROM b
whERE a.id = b.id;

这是一个 INNER JOIN .我同意如果 Postgres 和派生数据库支持显式 JOIN 会很好s 到更新表(就像其他一些数据库一样)。但你的问题的答案是,这是一个 INNER JOIN .

我应该注意,如果你想要一个 LEFT JOIN ,你有两个选择。一种是相关子查询:
UPDATE a
SET col = (SELECT b.val FROM b whERE a.id = b.id);

另一个是 JOIN的附加级别(假设 ida 中是唯一的):
UPDATE a
SET col = b.val
FROM a a2 LEFT JOIN
b
ON a2.id = b.id
WHERE a.id = a2.id;

关于sql - Vertica UPDATE 语句中使用了哪种联接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40350281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com