Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да съедините две таблици, за да получите следния резултат?

Искате всичко във втората таблица и след това съвпадащи редове или нова 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);

РЕДАКТИРАНЕ:

Модифицираният въпрос е доста различен от оригинала. Това е просто 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Увеличете производителността с групово събиране в Oracle

  2. Създайте нов потребител на Oracle и дайте привилегии:Синтаксис и примери

  3. Как да заявя име на база данни в Oracle SQL Developer?

  4. Потърсете стойност в стойността на колоната, която съхранява стойности, разделени със запетая

  5. Как да подложа нули за числово поле?