合并三个表中的数据

时间:2011-03-05 11:01:31

标签: sql merge union multiple-columns

我有三张桌子,tbA,tbB& tbC有2个cols。我想合并三个表并按mID对它们进行分组,并生成这样的格式化输出...

MID,mAreaA,mAreaB,mAreaC


表的结构 的 TBA

MID,mAreaA


表的结构 的 TBB

MID,mAreaB


表的结构 的 TBC

MID,mAreaC


我的数据如下

  表pbA
1,1.83
2,3,6.65
  4,9.30

     

表tbB 1,6.15
3,5.40

     

表tbC
1,0.55


我需要的输出是这样的......

  

MID,mAreaA,mAreaB,mAreaC
  1,1.83,6.15,0.55
2,3,6,55,0,0
  3,0,5.40,0
4,9.30,0,0

1 个答案:

答案 0 :(得分:1)

您需要做的是拥有每个表中所有ID的来源,因此您可以LEFT JOIN反对它。这将确保考虑每个ID,并且每个表中的'missing'mId在输出中表示为NULL mArea。

SELECT
    merged.id as mID,
    a.mAreaA,
    b.mAreaB,
    c.mAreaC
FROM 
   (SELECT mid as id FROM tba
   UNION
   SELECT mid as id FROM tbb
   UNION
   SELECT mid as id FROM tbc) merged
LEFT JOIN tbA a ON merged.id = a.mid
LEFT JOIN tbB b ON merged.id = b.mid
LEFT JOIN tbC c ON merged.id = c.mid

可能有更好的方法可以做到这一点,但你还没有解释你正在使用的数据库产品,并且架构似乎非常不正统。如果你不得不经常这样做,我会担心的。此外,如果找不到mAreaX的值,则返回值中将显示NULL。如果您需要它为非null,则coalesce为空字符串。