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

次の結果を得るために2つのテーブルを結合するにはどうすればよいですか?

    2番目のテーブルのすべてを必要とし、次に一致する行または新しい group0 最初の表にあります。

    これはjoinだと思います ロジック:

    select coalesce(t1.group0, t2.group0) as group0, 
           coalesce(t1.group1, t2.group1) as group1,
           t1.sum_a, t2.sum_b
    from table1 t1 full outer join
         table2 t2
         on t1.group0 = t2.group0 
    where (t2.group0 is not null and (t1.group1 = t2.group1 or t1.group0 is null)) or
          t2.group0 is null;
    

    このロジックは、 union allを使用すると簡単になります :

    select t2.group0, t2.group1, t1.sum_a, t2.sum_b
    from table2 t2 left join
         table1 t1
         on t2.group0 = t1.group0 and t2.group1 = t1.group1
    union all
    select t1.group1, t1.group1, t1.suma, 0
    from table1
    where not exists (select 1 from table2 t2 where t2.group0 = t1.group0);
    

    編集:

    変更された質問は、元の質問とはかなり異なります。これは単純な<​​code>完全外部結合です。 :

    select coalesce(t1.group0, t2.group0) as group0, 
           coalesce(t1.group1, t2.group1) as group1,
           coalesce(t1.sum_a, 0) as sum_a, coalesce(t2.sum_b, 0) as sum_b
    from table1 t1 full outer join
         table2 t2
         on t1.group0 = t2.group0  and t1.group1 = t2.group1;
    



    1. psycopg2を使用して複数の行を挿入する

    2. MySQLテーブルからデータのすべての組み合わせを取得するにはどうすればよいですか?

    3. 存在しない場合はテーブルスペースを削除します

    4. 毎月の時間ごとにラベルでユーザーをマーク