Google Bigquery 基于 WHERE 的多个更新 - 需要一个解决方案
Google Bigquery multiple updates based on WHERE - need a solution
有没有办法根据其他字段值进行多次更新
WHERE,不是 CASE
想法如下
谢谢
#standardSQL
UPDATE dataset.people
SET CBSA_CODE = '54620' where substr(zip,1,5) = '99047',
SET CBSA_CODE = '31793' where substr(zip,1,5) = '45700'
CASE
表达式实际上是您处理此逻辑的典型方式:
UPDATE dataset.people
SET CBSA_CODE = CASE SUBSTR(zip, 1, 5)
WHEN '99047' THEN '54620'
WHEN '45700' THEN '31793' END
WHERE
SUBSTR(zip, 1, 5) IN ('99047', '45700');
我能看到的唯一替代方法是 运行 多个更新语句,一个对应每个邮政编码值。但与使用 CASE
表达式相比,这似乎笨拙且不可取。
使用 SQL CASE,它是标准 SQL 的一部分(参见 official BQ docs):
#standardSQL
UPDATE dataset.people
SET CBSA_CODE = CASE
WHEN substr(zip,1,5) = '99047' THEN '54620'
WHEN substr(zip,1,5) = '45700' THEN '31793'
END
WHERE substr(zip,1,5) IN('99047', '45700')
有没有办法根据其他字段值进行多次更新 WHERE,不是 CASE
想法如下
谢谢
#standardSQL
UPDATE dataset.people
SET CBSA_CODE = '54620' where substr(zip,1,5) = '99047',
SET CBSA_CODE = '31793' where substr(zip,1,5) = '45700'
CASE
表达式实际上是您处理此逻辑的典型方式:
UPDATE dataset.people
SET CBSA_CODE = CASE SUBSTR(zip, 1, 5)
WHEN '99047' THEN '54620'
WHEN '45700' THEN '31793' END
WHERE
SUBSTR(zip, 1, 5) IN ('99047', '45700');
我能看到的唯一替代方法是 运行 多个更新语句,一个对应每个邮政编码值。但与使用 CASE
表达式相比,这似乎笨拙且不可取。
使用 SQL CASE,它是标准 SQL 的一部分(参见 official BQ docs):
#standardSQL
UPDATE dataset.people
SET CBSA_CODE = CASE
WHEN substr(zip,1,5) = '99047' THEN '54620'
WHEN substr(zip,1,5) = '45700' THEN '31793'
END
WHERE substr(zip,1,5) IN('99047', '45700')