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

Penggabungan dua tabel yang tidak sepele

Anda tidak mengatakan apakah Anda ingin menggabungkan ke salah satu tabel yang sudah ada atau ke tabel baru. Tapi bagaimanapun itu bukan "non-sepele".

Jika Anda ingin menyisipkan kumpulan data dari salah satu tabel yang ada ke tabel lainnya, gunakan MERGE (petunjuk ada di pertanyaan).

SQL> select * from t1;

        ID TS             MONEY
---------- --------- ----------
         1 25-JUL-09        123
         2 04-AUG-09         67

SQL> select * from t2;

        ID TS             MONEY
---------- --------- ----------
         2 08-AUG-09         67
         3 10-AUG-09        787

SQL> merge into t1
  2     using   t2
  3     on ( t1.id = t2.id )
  4     when matched then
  5          update set ts = ts + ((t2.ts - t1.ts) / 2)
  6     when not matched then
  7          insert
  8             (id, ts, money)
  9     values
 10              (t2.id, t2.ts, t2.money)
 11  /

2 rows merged.

SQL> select * from t1
  2  /

        ID TS             MONEY
---------- --------- ----------
         1 25-JUL-09        123
         2 10-AUG-09         67
         3 10-AUG-09        787

SQL>

Jika Anda ingin memasukkan kedua set data ke dalam tabel baru, Anda dapat melakukannya seperti ini:

SQL> insert all
  2      when t1_id = t2_id then
  3          into t3 values (t1_id, t1_ts + ((t2_ts - t1_ts)/2), t1_money)
  4      when t1_id is not null and t2_id is null then
  5          into t3 values (t1_id, t1_ts, t1_money)
  6      when t1_id is null and t2_id is not null then
  7          into t3 values (t2_id, t2_ts, t2_money)
  8  select t1.id as t1_id
  9         , t1.ts as t1_ts
 10         , t1.money as t1_money
 11         , t2.id as t2_id
 12         , t2.ts as t2_ts
 13         , t2.money as t2_money
 14  from t1 full outer join t2 on t1.id = t2.id
 15  /
SQL> select * from t3
  2  /

        ID TS             MONEY
---------- --------- ----------
         2 06-AUG-09         67
         1 25-JUL-09        123
         3 10-AUG-09        787

SQL>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-19011:Buffer string karakter terlalu kecil

  2. Apakah Oracle mengambil semua baris sebelum mengevaluasi rownum?

  3. Oracle lebih cepat memeriksa tumpang tindih

  4. Bagaimana cara mengubah nilai variabel global dalam paket PL/SQL secara dinamis?

  5. Bagaimana rata-rata interval waktu?