通常,我将使用一个带有相关子查询的SELECT语句制作此表,但是我不能在Snowflake中吗?无论如何,我想更新表中的所有行,对于不匹配的行使用特殊值(9999)。 在T-SQL中,我会做类似的事情
update x
set x.value = coalesce(n.value2, 9999)
from x
left join n
on x.id = n.id
如何在Snowflake中做同样的事情?
答案 0 :(得分:1)
@Simon Darr 在更新中经常需要左连接以确保不匹配的记录设置为 NULL。例如,如果您有一组具有现有值的记录,并且您想根据连接的子表进行更新以覆盖这些值,您需要确保没有连接子记录的任何记录都设置为 NULL .
通过使用 INNER JOIN(或 Snowflake 中的 WHERE),这意味着没有匹配子记录的记录将被排除在更新之外,从而使这些记录上的值保持不变。这会留下旧的、过时的和可能无效的数据。您可以通过使用 to 步骤来解决这个问题,首先将所有值清零,然后进行更新,但与使用 LEFT JOIN 在 SQL Server 中所做的相比,这似乎效率极低且容易出错。
答案 1 :(得分:0)
根据文档here,您不使用JOIN
关键字,而是在WHERE
中使用联接,如下所示:
update t1
set t1.number_column = t1.number_column + t2.number_column, t1.text_column = 'ASDF'
from t2
where t1.key_column = t2.t1_key and t1.number_column < 10;
答案 2 :(得分:-1)
我们可以使用合并来解决这个问题
merge tablea a
using (
select b.colpkb,b.colx , c.coly,c.colpkc
from tablea b
left join tableb c on b.colpkb=c.colpkc
) lf
on a.colpka= lf.colpkb
when matched
then update
set
a.colx=lf.colx;