1

私は2つの列を持つ3つのテーブル、tbA、tbB、およびtbCを持っています。3 つのテーブルをマージし、mID でグループ化し、次のような書式設定された出力を生成したいと思います...

ミッドID、ミリエリアA、ミリエリアB、ミリエリアC


テーブル tbAの構造

ミッドID、ミリエリアA


テーブル tbBの構造

ミッドID、ミリエリアB


テーブル tbCの構造

ミッドID、ミリエリアC


私が持っているデータは次のとおりです

表 tbA
1,1.83
2,3.65
4,9.30

表 tbB 1,6.15
3,5.40

表 tbC
1,0.55


私が必要とする出力は、このようなものです...

ミッドID、ミリエリアA、ミリエリアB、ミリエリアC
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 が表示されます。null 以外にする必要がある場合はcoalesce、空の文字列にします。

于 2011-03-05T11:55:37.593 に答える