Заполнение SQL значениями из второй таблицы - PullRequest
0 голосов
/ 02 сентября 2018

Я пришел с этим запросом, чтобы заполнить пропущенное поле из второй таблицы, используя подзапрос.
Я не могу изменить оригинал таблица

SELECT
CASE WHEN original.target_field IS NULL THEN  
  (SELECT fill_in.target_field FROM second.table fill_in 
   WHERE original.id = fill_in.id)  
ELSE  
  original.target_field END AS myField
FROM 
  primary.table original

Мне было интересно, если я что-то упустил и был ли более эффективный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Всегда стоит тестировать разные методы. Но ваш запрос должен быть в порядке с соответствующим индексом.

Я бы написал так:

SELECT (CASE WHEN o.target_field IS NULL  
             THEN (SELECT f.target_field
                   FROM second.table f 
                   WHERE o.id = f.id
                  )  
             ELSE o.target_field
        END) AS myField
FROM primary.table o;

Вы хотите индекс на second.table(id, target_field). Вы хотели бы тот же индекс для LEFT JOIN версии.

0 голосов
/ 02 сентября 2018

Вы можете использовать LEFT JOIN и COALESCE вместо коррелированного подзапроса:

SELECT COALESCE(original.target_field,fill_in.target_field) AS myField
FROM primary.table original
LEFT JOIN second.table fill_in 
  ON original.id = fill_in.id
...