sql >> データベース >  >> RDS >> Mysql

複数のテーブルを使用したSQL完全外部結合

    2つのことのいずれかを実行する必要があります(これらは両方ともTable0を想定しています numのすべてのインスタンスがあります )-

    1. 'leaf'テーブル(1〜4)のすべての行がすでに合計されている場合は、単純なLEFT JOINCOALESCE()を使用 選択)で十分です-GROUP BYも必要ありません 。

    2. 行を合計する必要がある場合は、前にそれらを合計する必要があります。 結合。そうでない場合、異なるテーブルのnumごとに複数の行が発生すると、結果が乗算されます。 。

    このようなもの:

    SELECT Table0.num, COALESCE(Table1.qty, 0), COALESCE(Table2.qty, 0), 
                       COALESCE(Table3.qty, 0), COALESCE(Table4.qty, 0)
    FROM Table0
    LEFT JOIN (SELECT num, SUM(qty1) as qty
               FROM Table1
               GROUP BY num) Table1
    ON Table1.num = Table0.num
    LEFT JOIN (SELECT num, SUM(qty2) as qty
               FROM Table2
               GROUP BY num) Table2
    ON Table2.num = Table0.num
    LEFT JOIN (SELECT num, SUM(qty3) as qty
               FROM Table3
               GROUP BY num) Table3
    ON Table3.num = Table0.num
    LEFT JOIN (SELECT num, SUM(qty4) as qty
               FROM Table4
               GROUP BY num) Table4
    ON Table4.num = Table0.num
    

    SQLFiddleの例



    1. データが含まれているときに列タイプを数値からvarchar2に変更するOracleSQL

    2. コードにポップアップし続けるエラー(接続はすでに開いています)

    3. 互換性のあるORA-16484のためにアーカイバがハングしました

    4. 最新バージョンのSQLServerにアップグレードするための完璧なストーム