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
Destination Table:
EMP
Figure 2
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
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
Penjelasan
Query pada listing 2 memecahkan permasalahan dengan hanya mengupdate NAME dengan ID yang sesuai, dan membiarkan ID yang tidak sama.
tengkiu bos, saya baru aja dapet masalah yg sama dan solved berkat code anda
ReplyDeletesama-sama, kita saling belajar dan saling bantu aja...
ReplyDeleteNurohman