【问题标题】:BigQuery MERGE Query: Merge tables based on conditionBigQuery MERGE Query:根据条件合并表
【发布时间】:2020-10-02 16:52:48
【问题描述】:

我在 BigQuery 中使用 MERGE 查询,发现我无法根据条件更新特定行。 例如,我的表中已经存在 5 条记录。我只想更新值已更改的两条记录。当我执行以下查询时,所有行都会更新。这意味着 3 条记录中有 5 条我不想更改值。只要我收到应该更改现有记录的新值。

MERGE `test.organization_user` T
USING `test.user_details`  S
ON T.user_id = S.user_id
WHEN MATCHED AND 
(
  T.organization <> S.organization OR
  T.contact_number <> S.contact_number
)
THEN
  UPDATE 
  SET  
  T.organization = S.organization,
  T.contact_number = S.contact_number
WHEN NOT MATCHED THEN
  INSERT ROW

对于这种情况是否有任何解决方案或使用合并它将更新所有匹配的记录,如果我们不想更新现有的记录,那么我们是否应该为源表中这些记录的所有字段提供值(将从哪些值更新到目标表)?

一个例子是:

【问题讨论】:

  • 你能分享一些示例数据吗?
  • @SomendraKanaujia 我已经更新了问题中的示例。

标签: sql merge google-bigquery dml


【解决方案1】:

您应该在以下条件下处理 null:-

MERGE `test.organization_user` T
USING `test.user_details`  S
ON T.user_id = S.user_id
WHEN MATCHED AND 
(
  IFNULL(T.organization,'') <> IFNULL(S.organization,'') OR
  IFNULL(T.contact_number,0) <> IFNULL(S.contact_number,0)
)
THEN
  UPDATE 
   SET  
  T.organization = S.organization,
  T.contact_number = S.contact_number
WHEN NOT MATCHED THEN
  INSERT ROW

【讨论】:

  • 非常感谢您分享答案。
猜你喜欢
  • 2022-01-21
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多