sql >> Database teknologi >  >> RDS >> Oracle

Hvordan forbinder man to tabeller for at få følgende resultat?

Du vil have alt i den anden tabel og derefter matchende rækker eller ny group0 i den første tabel.

Jeg tror, ​​at dette er join logik:

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;

Denne logik er nemmere med 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:

Det ændrede spørgsmål er helt anderledes end originalen. Det er en simpel full outer join :

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. 9 vitale opgaver, som DBA'er er ansvarlige for

  2. Få en liste over alle borde i Oracle?

  3. Hvad er fordelene ved at oprette Stored Procedures i SQL og MySQL?

  4. INDSÆT rækker i flere tabeller i en enkelt forespørgsel ved at vælge fra en involveret tabel