【发布时间】:2016-10-31 20:43:34
【问题描述】:
在基于连接值更新表时,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 的内部连接?或者它是否被更新为零,就好像条件是左外连接一样?
【问题讨论】:
-
查询中的
b是什么?
标签: sql join left-join vertica