Snowflake cloud data platform 雪花合并使用相同的表

Snowflake cloud data platform 雪花合并使用相同的表,snowflake-cloud-data-platform,snowflake-schema,Snowflake Cloud Data Platform,Snowflake Schema,我有一个表,它的主键是1,另一列是roll number 我想检查表中是否存在id值,如果是,则更新其卷号。如果没有,请在表中插入id和卷号 我正在尝试使用合并 parameters: id_value, roll_number merge into "test_table" as t using (SELECT * from "test_table" where id = id_value) as s on t.id=s.id when match

我有一个表,它的主键是1,另一列是roll number

我想检查表中是否存在id值,如果是,则更新其卷号。如果没有,请在表中插入id和卷号

我正在尝试使用合并

parameters: id_value, roll_number


merge into "test_table"  as t
using (SELECT * from "test_table" where id = id_value) as s
on t.id=s.id
when matched then
    update set t.roll_number=5
when not matched then
    insert (id, roll_number) values (id_value,roll_number);


当值存在时,它会工作,但在insert情况下不会更新表。未插入任何行。

当源和目标是同一个表时,如果它不在目标中,它就不会在源中。所以没有什么可插入的。

您应该可以使用如下所示的merge语句来完成此操作:

-先设置参数 设置id_值,卷数=1,5; -运行合并 合并到测试表中 使用选择 第1列作为id, 第2列为卷号 从…起 值$id\u值$roll\u编号tt 在测试中_table.id=tt.id 匹配后,更新设置测试表。滚动编号=tt。滚动编号 如果不匹配,则插入id、卷号值tt.id、tt.roll\U号; 完整示例:

-设置示例表并插入值 创建临时表test_表 身份证号码 卷号 ; -插入一些示例数据 将覆盖插入到测试表中 值1,2, 2, 1, 3, 6; -下面是初始表的外观 挑选* 从测试表; - +-+------+ -| ID |卷号| - +-+------+ - |1 |2 | - |2 |1 | - |3 |6 | - +-+------+ -设置参数 设置id_值,卷数=1,5; -使用参数运行merge语句。 -这应将ID为1的卷号更新为值5。 合并到测试表中 使用选择 第1列作为id, 第2列为卷号 从…起 值$id\u值$roll\u编号tt 在测试中_table.id=tt.id 匹配后,更新设置测试表。滚动编号=tt。滚动编号 如果不匹配,则插入id、卷号值tt.id、tt.roll\U号; -现在检查一下桌子是什么样子 挑选* 从测试表; - +-+------+ -| ID |卷号| - +-+------+
-| 1 | 5 |那么,如果是,请运行update命令,如果不运行insert命令,选择和检查数据是否存在的最佳方法是什么?有没有更好或更有效的方法来做到这一点?