【问题标题】:SQL Filling In Values From A Second TableSQL 填充第二个表中的值
【发布时间】:2019-02-07 20:20:39
【问题描述】:

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

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

我想知道我是否遗漏了什么,是否有更高效的方法来做到这一点?

【问题讨论】:

    标签: sql performance teradata


    【解决方案1】:

    您可以使用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
    

    【讨论】:

      【解决方案2】:

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

      我会这样写:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 1970-01-01
        • 2011-01-10
        • 1970-01-01
        • 2021-10-22
        相关资源
        最近更新 更多