обновление + регистр + оператор объединения в Redshift - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть этот код из SQL Server, который я должен реализовать в Redshift.

update t1 set some_flag = (case when b.some_value is null then false else true end)
from t1 a
left join t2 b on a.code = b.code;

Я получаю сообщение об ошибке в Redshift, которое говорит:

 Target table must be part of an equijoin predicate

Как я могу изменить вышеперечисленное, чтобы оно работало в Redshift?Благодарю.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

Вы должны полностью указать имя таблицы с колонкой вместо псевдонима.Я думаю, Redshift не поддерживает псевдоним таблицы в команде обновления.

update merge_demo1
set lastname = (case when merge_demo1.lastname = merge_demo1.lastname then merge_demo1.lastname else merge_demo2.lastname end)
from merge_demo2
where merge_demo1.id = merge_demo2.id;
0 голосов
/ 21 сентября 2019

Попробуйте удалить ссылку в предложении from:

update t1
    set some_flag = (case when b.some_value is null then false else true end)
from t2 b 
where t1.code = b.code;

Postgres (и базы данных, производные от Postgres) допускают предложение FROM для UPDATE.Однако ссылки на таблицы в дополнение к ссылочной таблице в UPDATE.Это отличается от SQL Server, где предполагается, что ссылка на таблицу в UPDATE взята из предложения FROM, если возможно, даже игнорируя псевдоним при необходимости.

Вы должны быть в состоянии упростить это до:

update t1
    set some_flag = (b.some_value is not null);
from t2 b 
where t1.code = b.code;
...