SQL从第二个表中填充值

时间:2018-09-02 15:41:03

标签: sql performance teradata

我想出了这个查询,使用子查询在第二个表中填写了缺失的字段。
我无法修改原始

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 :(得分:2)

您可以使用LEFT JOINCOALESCE代替相关子查询:

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

答案 1 :(得分:1)

总是值得测试不同的方法。但是您的查询应该可以使用适当的索引。

我将其写为:

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版本,您需要相同的索引。