SQL JOIN with Date Data: JOINs Antara Dua Tabel yang Memiliki Tanggal dan Jumlah ID Unik yang Berbeda
Inilah yang harus kamu lakukan ketika ingin menggabungkan dua tabel yang memiliki tanggal dan jumlah unik id yang berbeda
Terkadang data yang disitu terdapat data tanggal kita membutuhkan tenaga lebih untuk meananganinya dan juga harus cermat, karena jika tidak cermat kita bisa membuat kesalahan besar. Well, pada pembahasan kali ini sebenarnya bukan pembahasan yang berat, hanya saja saya ingin memberitahu bahwa kita tidak boleh sembarangan dalam menggunakan perintah JOIN pada SQL yang disitu terdapat data tanggal, kita harus memahami data kita terlebih dahulu seperti apa dan apa tujuannya.
Table of Contents
- Contoh Kasus
- Menguraikan Masalah
- Penyelesaian
Contoh Kasus
Pada contoh kasus kali katakanlah kita mempunyai 2 tabel yang berisi data penjualan sayuran di sebuah supermarket, saya namakan tersebut tabel 1 dan tabel 2.
Tabel 1 isinya seperti berikut:
Pada tabel 1 ini berisi catatan produk-produk yang dibeli oleh user beserta info tanggalnya.
Tabel 2 isinya seperti berikut:
Pada tabel 2 berisi catatan quantity yang dibeli oleh user beserta info tanggalnya.
Kedua tabel diatas saling berhubungan, dan kolom referensinya adalah kolom user_id
.
Sekarang misalnya atasan kalian meminta kepada kalian untuk mengetahui informasi penjualan produk selama ini dimana informasinya memuat kolom user_id
, date
, product
, dan qty
. Bagaimana cara menjawabnya ? mari kita uraikan masalahnya dibagian selanjutnya.
Problem
Sebelum kita menjawabnya, mari kita uraikan masalah yang sebenarnya kita harus cermat disitu:
- Jumlah per
user_id
dari kedua tabel berbeda
Jika kita cermati ada perbedaan banyaknya catatan per user_id
dari kedua tabel, yaitu user_id
2 & 3
2. Tanggal transaksi
Tanggal transaksi juga mempunyai perbedaan disebabkan perbedaan yang ada di poin 1
Jika kita menemui 2 masalah diatas dan saat menggabungkan 2 tabel dan key kolomnya hanyauser_id
maka akan mengembalikan hasil yang aneh, berikut contohnya:
Pada contoh kasus kali ini saya menggunakan LEFT JOIN untuk menggabungkan 2 tabel. LEFT JOIN singkatnya adalah mengembalikan seluruh records yang berada di tabel kiri (tabel 1) dan records yang cocok dari tabel kanan (tabel 2).
SELECT t1.user_id, t1.date, t1.product, t2.qty
FROM table_1 AS t1
LEFT JOIN table_2 as t2
ON t1.user_id = t2.user_id
akan mengembalikan hasil seperti berikut:
Dari hasil diatas dapat kita lihat bahwa pada user_id
2 & 3 mengembalikan hasil yang aneh, jika key kolomnya hanya berdasarkan user_id
maka pada dasarnya ia akan mengembalikan nilai yang sama dengan nilai dari tabel yang disitu terdapat nilainnya (baik itu dari tabel kanan maupun kiri), berikut adalah contoh masalah yang terjadi (perhatikan tanda merah, hijau, dan biru pada gambar di bawah ini):
Tanda merah menandakan nilai yang tidak cocok dari tabel manapun, oleh karena itu ia mengembalikan nilai yang aneh dan pada dasarnya mengembalikan nilai berdasarkan referensi user_id
urutan pertama (tanda warna hijau). Sedangkan tanda warna biru adalah nilai asli yang berada di masing-masing tabel asal. Pertanyaannya sekarang adalah bagaimana menyelesaikan masalah tersebut? mari kita bahas dibagian selanjutnya.
Penyelesaian
Setelah kita menguraikan masalah di atas mari kita pecahkan masalah tersebut. Pada dasarnya jika kita menemui masalah di atas, yaitu ketika ingin menggabungkan dua tabel yang memiliki tanggal dan jumlah id yang berbeda, maka ketika menggunakan key kolom tidak cukup kita hanya menggunakan berdasarkan id saja ( user_id
), tetapi kita juga harus menambahkan tanggalnya ( date
), agar sama-sama cocok ketika dijoinkan, berikut query penyelesainnya:
SELECT t1.user_id, t1.date, t1.product, t2.qty
FROM table_1 as t1
LEFT JOIN table_2 as t2
ON t1.user_id = t2.user_id and t1.date = t2.date
akan mengembalikan hasil seperti berikut:
Dari hasil diatas dapat kita lihat bahwa kolom-kolom yang ada sudah menyesuaikan dengan benar berdasarkan user_id
dan date
serta perintah LEFT JOIN. Hasil [NULL]
yang berada di kolom qty
disebabkan karena tidak ada kecocokan record dari tabel kanan.
Kesimpulan
So far kita telah belajar tentang bagaimana menggabungkan dua tabel yang memiliki tanggal dan jumlah id unik yang berbeda. Kita tidak boleh sembarangan dalam menggunakan perintah JOIN pada SQL yang disitu terdapat data tanggal, kita harus memahami data kita terlebih dahulu seperti apa dan apa tujuannya. Terimakasih, semoga bermanfaat.