bigquery合并查询:基于条件合并表

xkftehaa  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(454)

我在bigquery中使用合并查询,注意到无法根据条件更新特定行。例如,表中已有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

对于这种情况有没有解决方案,或者使用merge,它会更新所有匹配的记录,如果我们不想更新现有的记录,那么我们是否应该在源表中为这些记录的所有字段设置值(这些值将从这些字段更新到目标表)?
例如:

wixjitnu

wixjitnu1#

您应该在中处理nullcondition:-

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

相关问题