你好(一开始我很抱歉我的英文不好)
我有两张 table : tbl1
和 tbl2
;两者都有相同的结构,但如果来自不同的来源,我们不能混合它们的数据集 .
在另一个表 tbl3
我有 dataid
和 datasource
. 我想做的是从源中链接的表中选择数据 .
伪代码我试图产生:
SELECT
tbl3.dataid,
tbl3.datasource,
SEL_TBL.important_data,
SEL_TBL.another_thing,
SEL_TBL.something_completly_different
FROM
tbl3
LEFT JOIN
( SWITCH tbl3.datasource
CASE 'tbl1':
tbl1 AS >> SEL_TBL
CASE 'tbl2':
tbl2 AS >> SEL_TBL
)
ON
SEL_TBL.dataid = tbl3.dataid
我需要的结果包含: important_data
, another_thing
,当然 something_completly_different
来自"switch statment"中选择的表格 .
什么现在有效:
SELECT
tbl3.dataid,
tbl3.datasource,
(
CASE
WHEN tbl3.datasource ='tbl1'
THEN
tbl1.important_data
ELSE
tbl2.important_data
END
) important_data
FROM
tbl3
LEFT JOIN
tbl2
ON
tbl2.dataid = tbl3.dataid
LEFT JOIN
tbl1
ON
tbl1.dataid = tbl3.dataid
在这个查询的结果我得到 dataid
, datasource
和 imporatn_data
. 我可以为每一个字段重复整个案例块,但也许有更多的文明方法 .
哦还有一件事:tbl1.dataid和tbl2.dataid可以获得相同的值(这就是为什么我不能混合表)
1 回答
最佳解决方案是使用左连接并包括连接要求 .
然后coalesce为您提供每个字段的结果 .
由于这是星型数据模型的标准做法,因此SQL优化器将使其运行得非常快 .