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

同じ列で複数のテーブルを完全結合する

    いくつかの方法がありますが、次の方法が最も人気があると思います:

    select allk.k, t1.c1, t2.v2, t3.v3, t4.v4
    from (select k from t1 union 
          select k from t2 union
          select k from t3 union
          select k from t4
         ) allk left outer join
         t1
         on allk.k = t1.k left outer join
         t2
         on allk.k = t2.k left outer join
         t3
         on allk.k = t3.k left outer join
         t4
         on allk.k = t4.k;
    

    すべての k の別のテーブルがある場合 allk の代わりにそれを使用できます サブクエリ。

    full outer joinを簡単に書く方法 クエリは coalesce() を使用することです :

    SELECT COALESCE(t1.K, t2.K, t3.K, t4.K) [K], V1, V2, V3, V4
    FROM @T1 t1 FULL JOIN
         @T2 t2
         ON t2.K = t1.K FULL JOIN
         @T3 t3
         ON t3.K = coalesce(t1.K, t2.K) FULL JOIN
         @T4 t4
         ON t4.K = coalesce(t1.K, t2.K, t3.k);
    

    3 番目の方法は、union all です。 /group by メソッド:

    select k, max(v1) as v1, max(v2) as v2, max(v3) as v3, max(v4) as v4
    from (select k, v1, NULL as v2, NULL as v3, NULL as v4
          from t1 union all
          select k, NULL as v1, v2, NULL as v3, NULL as v4
          from t2 union all
          select k, NULL as v1, NULL as v2, v3, NULL as v4
          from t3 union all
          select k, NULL as v1, NULL as v2, NULL as v3, v4
          from t4
         ) t
    group by k;
    



    1. SQL * Plusクエリから空白を削除するにはどうすればよいですか?

    2. MySQLは最大値を返すか、1つの列に値がない場合はnullを返します

    3. PostgreSQL:頻度テーブルの拡張

    4. Laravel 5.5ピボット結合により、MySQLのメイン結果を含むピボット値を取得します