she*_*nku 2 sql t-sql sql-server select
我有三个表,一个是默认值表.
我需要做的是选择TableA和TableB的值,并从默认值的选择中回填任何缺失值.
每个表都有一个Key和Value列.
数据的示例可能如下所示:
DefaultTable
-------------
Key1 | Value1
Key2 | Value2
Key3 | Value3
Key4 | Value4
Key5 | Value5
TableA
--------------
Key3 | AValue3
Key5 | AValue5
TableB
--------------
Key1 | BValue1
Run Code Online (Sandbox Code Playgroud)
所以我的最终数据集需要如下所示:
Key1 | BValue1
Key2 | Value2
Key3 | AValue3
Key4 | Value4
Key5 | AValue5
Run Code Online (Sandbox Code Playgroud)
我玩各种连接,但似乎无法破解它,你的帮助将不胜感激.
谢谢
你可以使用LEFT JOIN这个.
SELECT a.Column1,
COALESCE(b.Column2, c.Column2, a.Column2) Column2
FROM DefaultTable a
LEFT JOIN TableA b
ON a.Column1 = b.Column1
LEFT JOIN TableB c
ON a.Column1 = c.Column1
Run Code Online (Sandbox Code Playgroud)
要进一步了解联接,请访问以下链接:
OUTPUT
?????????????????????
? COLUMN1 ? COLUMN2 ?
?????????????????????
? Key1 ? BValue1 ?
? Key2 ? Value2 ?
? Key3 ? AValue3 ?
? Key4 ? Value4 ?
? Key5 ? AValue5 ?
?????????????????????
Run Code Online (Sandbox Code Playgroud)
引自这个链接:与postgresql的性能比较:left join vs union all(我希望它与之相同SQL Server).
使用LEFT JOIN的查询是利用索引的最佳选择.例如,如果您想要排序结果,那么UNION查询将是最慢的.或者,如果您的查询是主查询中的子查询,则UNION将阻止对表[element]索引的任何可能利用.因此,执行此类子查询的JOIN或WHERE会很慢.