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