Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Ghép hai bảng như thế nào để có kết quả sau?

Bạn muốn mọi thứ trong bảng thứ hai và sau đó khớp với các hàng hoặc group0 mới trong bảng đầu tiên.

Tôi nghĩ đây là join logic:

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;

Logic này dễ dàng hơn với 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);

CHỈNH SỬA:

Câu hỏi được sửa đổi khá khác so với bản gốc. Đó là 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. So sánh với ngày tháng trong Oracle sql

  2. Chiều rộng cột tối đa trong Oracle spool vào tệp

  3. Truy vấn SQL 00904. 00000 -% s:mã định danh không hợp lệ

  4. Truy vấn trong Oracle để chạy tổng

  5. Hàm CHR () trong Oracle