首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果存在“否则插入”,则斯诺法尔克sql更新

如果存在“否则插入”,则斯诺法尔克sql更新
EN

Stack Overflow用户
提问于 2022-07-06 14:48:03
回答 1查看 403关注 0票数 2

我看过其他问题,但似乎雪花不支持sql中的if/else,至少不支持其他sql服务器支持它的方式。

有些人建议使用javascript,但如果可以的话,我想避免使用。

我试图使用雪花python库将一些数据插入到表中,如果它已经存在,那么我想更新数据,我已经查看了合并,但它似乎不适合我,因为我的数据不是表

这就是我到目前为止没有用的

代码语言:javascript
复制
f"""BEGIN
                IF (EXISTS (SELECT * FROM {self.okr_table} WHERE kpi=TRUE AND Month(month)=MONTH(current_date()) AND year(month)=YEAR(current_date())))
                THEN 
                UPDATE {self.okr_table} SET [DATA] = {json.dumps(self.data)} WHERE kpi=TRUE AND Month(month)=MONTH(current_date()) AND year(month)=YEAR(current_date()))
                ELSE 
                INSERT INTO {self.okr_table} (month, data, kpi) SELECT current_date(),parse_json('{json.dumps(self.data)}'), true;
                END"""
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-06 15:21:28

若要从插入/更新中筛选,最好使用单个合并语句

我看过合并,但它似乎不适合我,因为我的数据不是表

这不是一个问题,因为源可以是表或子查询:

代码语言:javascript
复制
MERGE INTO {self.okr_table} 
USING (SELECT PARSE_JSON({json.dumps(self.data)} AS data
             , MONTH(current_date()) AS month
             , YEAR(current_date()) AS year
      ) s
  ON  {self.okr_table}.KPI
  AND MONTH({self.okr_table}.month) = s.month
  AND YEAR({self.okr_table}.month) = s.year
WHEN MATCHED THEN UPDATE
WHEN NOT MATCHED THEN INSER ...;

如果/否则分支工作在雪花:

代码语言:javascript
复制
BEGIN
  IF (EXISTS (...)) THEN
      UPDATE ... ;
  ELSE
      INSERT ... ;
  END IF;
END;

请注意每句话后的;END IF和条件括号。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72885625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档