【问题标题】:Joining multiple tables into one under one Id将多个表合并为一个下一个 ID
【发布时间】:2012-05-11 12:08:04
【问题描述】:

我有十几个表格,格式如下:

表 1

[idA] [numA]
 NULL   8
 1      10
 2      15
 3      16

表 2

[idB] [numB]
 2      14
 3      30
 4      32

表 3

[idC] [numC]
 NULL   56
 1      24
 4      37
 5      36

...

现在,我不确定如何制定 T-Sql 查询以产生以下结果:

[id] [numA] [numB] [numC] ...
NULL  8      0      56
1     10     0      24
2     15     14     0
3     16     30     0
4     0      32     37
5     0      0      36

关于如何解决这个问题有什么建议吗?

【问题讨论】:

  • 这与您之前的问题有何不同? stackoverflow.com/questions/10549952/…
  • 为什么你有这么多桌子?看起来数据库的设计有问题
  • @bluefeet 因为在上一个问题中我已经要求解决方案,但我并没有想到该解决方案将仅限于两个表并且不能应用于更多表的问题。这是 n 个表的问题。
  • @panagiotisKanavos 这些表实际上是我数据库中的视图。我必须支持孤立和累积视图的解决方案。

标签: sql sql-server database tsql join


【解决方案1】:

我提供了一个完全外连接的解决方案,因为这似乎是一种自然的方法:

SELECT coalesce(a.id, b.id, c.id, . . .) as id,
       a.NumA, b.NumB, c.NumC, . . .
FROM TableA a full outer join
     TableB b
     on a.id = b.id full outer join
     TableC c
     on coalesce(a.id, b.id) = c.id

但是,查询需要仔细编写,以使合并保持一致。这种方法的一个优点是它应该在查询的 id 列上使用索引。

【讨论】:

    【解决方案2】:

    请试试这个

    select id, max(numa),max(numb),max(numc) from
    (
    select id,numa,0 as numb,0 as numc from tb1
    union all
    select id,0 as numa,numb as numb,0 as numc from tb2
    union all
    select id,0 as numa,0 as numb,numc as numc from tb3
    )X
    group by id
    order by id
    

    谢谢 拉贾特

    【讨论】:

      【解决方案3】:
      SELECT Maintable.id, 
             Table1.numA, 
             Table2.numB, 
             Table3.numC 
      FROM   (SELECT ida AS id 
              FROM   Table1 
              UNION 
              SELECT idb AS id 
              FROM   Table2 
              UNION 
              SELECT idc AS id 
              FROM   Table3) MainTable 
             LEFT JOIN Table1 
               ON Maintable.id = Table1.Ida 
             LEFT JOIN Table2 
               ON Maintable.id = Table2.idB 
             LEFT JOIN Table3 
               ON Maintable.id = Table3.idC 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-07
        • 2019-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-20
        • 2020-05-01
        相关资源
        最近更新 更多