1

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

mID,m区域A,m区域B,m区域C


tbA的结构

中间,m区域A


tbB的结构

mID,m区域B


tbC的结构

mID,m区域C


我拥有的数据如下

表 tbA
1,1.83
2,3.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.65,0,0
3,0,5.40,0
4,9.30,0,0

4

1 回答 1

1

您需要做的是拥有每个表中所有 ID 的来源,因此您可以LEFT JOIN反对它。这将确保每个 ID 都被考虑在内,并且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。如果您需要它为非空,coalesce则为空字符串。

于 2011-03-05T11:55:37.593 回答