Maw Mumet!

- karena banyak hal yang tidak bisa diselesaikan sambil ngendog -

LEFT JOIN COUNT Null Result

{ 9 Des 2015 } { koding }

Seharian aku merasa seperti programmer goblok. Ngutak-atik query tapi nggak ketemu hasil yang diharapkan. Yah, mungkin ini balasan dari orang yang sombong merasa sudah mahir ng-query pakai Common Table Expression (CTE).

Jadi, gini lho cerita singkat dari query yang bikin gemas ini.

Kita punya dua tabel yang sederhana seperti di bawah ini:

CREATE TABLE tabel_spesies
(
  xx_idspesies character varying(4) NOT NULL,
  xx_namaspesies character varying(8) NOT NULL
);

CREATE TABLE tabel_warna
(
  hh_idspesies character varying(4) NOT NULL,
  hh_namawarna character varying(8) NOT NULL
);

 Kalau diisi data kira-kira hasilnya begini:

xx_idspesies xx_namaspesies
A01 Anggrek
A02 Mawar
hh_idspesies hh_namawarna
A01 PUTIH
A02 MERAH
A02 MERAH
A01 PUTIH
A02 PUTIH
 

Aku inginnya ng-query LEFT JOIN dua tabel di atas dengan hasil seperti ini:

xx_namaspesies jumlah_merah
Anggrek 0
Mawar 2

 

Sederhana toh? Awalnya ini query-ku:

SELECT tb1.xx_namaspesies, COUNT(tb2.hh_idspesies) AS jumlah_merah
FROM tabel_spesies tb1 LEFT JOIN tabel_warna tb2
ON tb1.xx_idspesies = tb2.hh_idspesies
WHERE tb2.hh_namawarna = 'MERAH'

 

Tapi yang muncul malah seperti ini:

xx_namaspesies jumlah_merah
Mawar 2

Lha, mana spesies Anggreknya?

 

Setelah mumet lama, ternyata penyelesaiannya sederhana! Hanya mengganti WHERE jadi AND seperti query di bawah ini:

SELECT tb1.xx_namaspesies, COUNT(tb2.hh_idspesies) AS jumlah_merah
FROM tabel_spesies tb1 LEFT JOIN tabel_warna tb2
ON tb1.xx_idspesies = tb2.hh_idspesies
AND tb2.hh_namawarna = 'MERAH'

 

Kayak orang goblok toh? Hahaha. :D

Tabel dan query di atas sekedar contoh saja. Yang aslinya lebih njelimet karena melibatkan banyak tabel, view, dan function. Maklum, buat kerjaan, hahaha. :D

 

Sebenernya sih bisa juga diaplikasikan dalam dunia blogging kalau ingin melihat laporan seperti di bawah ini.

id artikel judul artikel jumlah seluruh komentar komentar sudah dibalas komentar belum dibalas
1 Judul Artikel Pertama 24 20 4
2 Judul Artikel Kedua 61 60 1
3 Judul Artikel Ketiga 10 0 10

 

Kata Kunci