Vertica имеет интересный синтаксис обновления при обновлении таблицы на основе значения соединения. Вместо того, чтобы использовать соединение, чтобы найти строки обновления, он предписывает синтаксис вроде этого:Какое соединение используется в инструкции Vertica UPDATE?
UPDATE a
SET col = b.val
where a.id = b.id
(Обратите внимание, что этот синтаксис действительно предусмотрен в этом случае, потому что Vertica запрещает нам использовать где положение, что включает в себя " self-join ", то есть соединение, ссылающееся на обновляемую таблицу, в данном случае 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' в запросе? –