Google Bigquery несколько обновлений на основе ГДЕ - нужно решение - PullRequest
0 голосов
/ 30 апреля 2018

есть ли способ сделать несколько обновлений на основе другого значения поля ГДЕ, НЕ ДЕЛАЕТ

идея ниже

спасибо

#standardSQL
UPDATE dataset.people
SET CBSA_CODE = '54620' where substr(zip,1,5) = '99047',
SET CBSA_CODE = '31793' where substr(zip,1,5) = '45700'

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Использовать SQL CASE, который является частью стандартного SQL (см. официальные документы BQ ):

#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')
0 голосов
/ 30 апреля 2018

A 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.

...