Friday, February 5, 2010

ORACLE : UPDATE TABLE FROM OTHER TABLE WHICH HAS SAME FIELD

Pengantar

Kadang ada situasi dimana kita ingin memperbaharui record pada sebuah table, dimana terdapat kesamaan di table lain. Dengan menggunakan update sederhana mengakibatkan tabel target yang tidak sama dengan table sumber menjadi berisi NULL.

Berikut salah satu penggunaan "where exists" dapat menghindari hal tersebut.

Kebutuhan

Oracle database 9i  atau lebih tinggi

Deskripsi permasalahan

Permasalahan di atas di gambarkan sebagai berikut.

Source Table:

DEPT

Figure 1

Picture 3

Destination Table:

EMP

Figure 2

Picture 1


Kita akan lakukan update field NAMA pada table EMP untuk ID yang sama dengan ID di table DEPT.

ID NAME

----------      

1        E

2        F

3        G

5        X

Solusi sangat mudah di awalnya sangat mudah, tapi hasilnya bermasalas seperti dibawah ini.

Listing 1

update EMP a set a.name =(select name from DEPT b where a.id=b.id );

Figure 3

Picture 2

Kita tidak pernah menginginkan null pada ID= 5.
Query pada Linsting 1 hanya meng-update NAME dengan ID sama, dan juga mengubah NAME dengan ID yang tidak sama sehingga isinya menjadi NULL,
dimana hal ini tidak diharapkan.

SOLUSI

Listing 2

update EMP a set a.name =(select b.name from DEPT b where a.id = b.id )  where exists(select 1 from DEPT b where a.id = b.id);

Figure 4

Picture 3

Penjelasan

Query pada listing 2 memecahkan permasalahan dengan hanya mengupdate NAME dengan ID yang sesuai, dan membiarkan ID yang tidak sama.


2 comments:

  1. tengkiu bos, saya baru aja dapet masalah yg sama dan solved berkat code anda

    ReplyDelete
  2. sama-sama, kita saling belajar dan saling bantu aja...

    Nurohman

    ReplyDelete