1.标准SQL:LEFT JOIN单行值
您可以使用条件(从而评估一次),以LEFT JOIN的一行值.然后,您可以使用COALESCE()为每列添加后备值.
这种语法变体比较简单,速度更快,具有多个值 – 对于昂贵/冗长的条件特别有趣:
SELECT COALESCE(x.txt1, trim(r2.team_name)) AS testing_testing
, COALESCE(x.txt2, trim(r2.normal_data)) AS test_response
, COALESCE(x.txt3, trim(r2.normal_data_2)) AS another_example
FROM rtp
JOIN rtd2 r2 ON -- missing context in question
LEFT JOIN (
SELECT 'testing'::text AS txt1
, 'test example'::text AS txt2
, 'test example #2'::text AS txt3
) x ON rtp.team_id = rtp.sub_team_id;
由于派生表x由单行组成,无需进一步条件即可进行连接.
子查询中需要显式类型转换.我在示例中使用文本(这也是字符串文字的默认值).使用您的实际数据类型.语法快捷方式value :: type是Postgres特定的,对于标准SQL使用cast(值AS类型).
如果条件不为TRUE,x中的所有值都为NULL,并且COALESCE进入.
或者,由于所有候选值来自特定情况下的表rtd2,LEFT使用原始CASE条件加入rtd2,并将CROSS JOIN加入到具有默认值的行中:
SELECT COALESCE(trim(