我有三张桌子,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
答案 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
为空字符串。