BigQuery中能否将多条UPDATE合并为单条多SET-WHERE的UPDATE?
可以合并为单条UPDATE语句
当然可以把这两条UPDATE合并成一条,用CASE WHEN逻辑匹配不同条件来设置对应字段值,同时把所有过滤条件整合到同一个WHERE子句里,避免更新无关记录。
合并后的SQL示例
UPDATE MY_DATASET.TABLE_ONE SET fieldOne = CASE WHEN fieldKey = 'key1' AND fieldData IN ('dataF1','dataF3') THEN 'data1' WHEN fieldKey = 'key2' AND fieldData = 'dataF2' THEN 'data11' ELSE fieldOne -- 保留原字段值,防止误更新其他记录 END, fieldTwo = CASE WHEN fieldKey = 'key1' AND fieldData IN ('dataF1','dataF3') THEN 'data2' WHEN fieldKey = 'key2' AND fieldData = 'dataF2' THEN 'data21' ELSE fieldTwo END WHERE (fieldKey = 'key1' AND fieldData IN ('dataF1','dataF3')) OR (fieldKey = 'key2' AND fieldData = 'dataF2')
关键说明
CASE WHEN分别对应原两条UPDATE的赋值逻辑,ELSE必须保留原字段值,避免不符合条件的记录被意外修改。WHERE子句整合了所有需要更新的记录的过滤条件,只对目标行执行更新,既提升效率又避免误操作。- 这种单条UPDATE的写法比多次执行更高效,尤其当更新记录量较大时,能减少BigQuery的查询开销。
内容的提问来源于stack exchange,提问作者mikestr
相关产品推荐
相关产品推荐

