Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara menggabungkan dua tabel untuk mendapatkan hasil berikut?

Anda ingin semuanya ada di tabel kedua dan kemudian mencocokkan baris atau group0 baru di tabel pertama.

Saya pikir ini adalah join logika:

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;

Logika ini lebih mudah dengan 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);

EDIT:

Pertanyaan yang dimodifikasi sangat berbeda dari aslinya. Itu adalah full outer join sederhana :

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan Hari Pertama Minggu Dari Nomor Minggu

  2. Oracle PL/SQL :menghapus karakter spasi dari string

  3. Apa alasan/kegunaannya adalah menggunakan kata kunci ENABLE dalam pernyataan basis data Oracle

  4. perlu mengelompokkan catatan berdasarkan pembalikan yang cocok

  5. Pengaturan Oracle per skema default pengguna (tidak mengubah sesi)