Kriteria filter yang berasal dari field data tabel pendukung lainnya.

Kriteria filter yang berasal dari field data tabel pendukung lainnya.



Semisal kita ingin mencari seseorang yang berada di sembarang (nama) departemen, dimana tabel utama mempunyai data yang tidak mempunyai detail atau relasi di tabel sekunder, dan tabel sekunder ini berelasi dengan tabel ketiga tempat dimana kolom pencarian berada. Bagaimana Querynya?



Misal tabelnya ialah:

m_individu

m_individuemploy

m_department

Mungkin kita akan tergesa untuk memberikan klausa seperti ini:

Departmentname like '%'

Yang menjadi masalah kolom Departmentname berada di m_Department sehingga klausa ini tidak selalu membawa hasil yang memuaskan, dalam hal table m_individu sebagai tabel utama tidak selalu mempunyai data pasangannya di m_individuemploy (one to many relationship).

Untuk menyelamatkannya, Anda tinggal menambahkan fungsi isnull berikut ini:

isnull(c.Departmentname,'') like '%'

Simak data berikut ini di m_individu:

dan simak tabel m_individuemploy, berikut ini. Tampak bahwa data tidak mengandung individu dengan memberid m000000002.

Simak data m_department berikut ini:

Semisal kita ingin menampilkan semua data di tabel m_individu dari semua departmen,

Dengan query pertama hasilnya akan seperti ini:

Tampak bahwa kita kehilangan baris data dari ‘arif’, mengapa? Karena informasi data arif (m00000000002) tidak ada di tabel m_individuemploy.


Relasi LEFT OUTER JOIN pun tidak bisa menampilkan data tersebut. Memang, apabila klausa where dihilangkan maka seluruh data tampil. Tetapi dalam kasus ini diasumsikan kita membutuhkan klausa nama departemen tersebut. Apabila kita menggunakan klausa pertama, hasilnya akan seperti di atas. Untuk memperbaikinya kita gunakan klausa kedua, sehingga seluruh data yang diinginkan akan tampil.

Sehingga keseluruhan query akan tampak seperti ini

SELECT a.[memberid] ,[firstname], [lastname], [midname],
case
[sex] when 1 then 'male' else 'female' end as gender,
c.departmentname, d.position, d.employeeid,
[maritalstatus], [dob] FROM
[m_individu] a
left
outer JOIN m_individuemploy d on a.memberid = d.memberid
left
outer JOIN m_department c on d.departmentid = c.departmentid
WHERE
isnull
(c.Departmentname,'') like '%'

Dan hasilnya akan seperti ini:


Jadi, hati-hati dengan cara pemasukan kolom kriteria yang bukan dari tabel utama.

wid, june 2008





No comments:

Post a Comment