首页 文章

选择表名以从中选择数据

提问于
浏览
1

你好(一开始我很抱歉我的英文不好)

我有两张 table : tbl1tbl2 ;两者都有相同的结构,但如果来自不同的来源,我们不能混合它们的数据集 .

在另一个表 tbl3 我有 dataiddatasource . 我想做的是从源中链接的表中选择数据 .

伪代码我试图产生:

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_dataanother_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

在这个查询的结果我得到 dataiddatasourceimporatn_data . 我可以为每一个字段重复整个案例块,但也许有更多的文明方法 .

哦还有一件事:tbl1.dataid和tbl2.dataid可以获得相同的值(这就是为什么我不能混合表)

1 回答

  • 2

    最佳解决方案是使用左连接并包括连接要求 .
    然后coalesce为您提供每个字段的结果 .
    由于这是星型数据模型的标准做法,因此SQL优化器将使其运行得非常快 .

    SELECT 
        tbl3.dataid,
        tbl3.datasource,
        COALESCE(tbl1.important_data, tbl2.important_data)  important_data
        COALESCE(tbl1.another_thing, tbl2.another_thing) another_thing,
        COALESCE(tbl1.something_completly_different, tbl2.something_completly_different) something_completly_different
    FROM tbl3
    LEFT JOIN tbl2 ON  tbl2.dataid = tbl3.dataid AND tbl3.datasource = 'tbl2'
    LEFT JOIN tbl1 ON  tbl1.dataid = tbl3.dataid AND tbl3.datasource = 'tbl1'
    

相关问题