BigQuery MERGE查询:根据条件合并表格

时间:2020-06-12 19:57:20

标签: sql merge google-bigquery dml

我在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

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

一个例子是:

enter image description here

1 个答案:

答案 0 :(得分: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