Mengambil Nilai Lalai untuk ID Hilang dalam Pertanyaan Klausa SQL IN
Artikel ini menangani cabaran pertanyaan SQL biasa: mendapatkan semula data untuk ID yang ditentukan, termasuk nilai lalai apabila ID tidak ditemui dalam jadual yang berkaitan. Senario ini melibatkan pengambilan data aktiviti pengguna dalam julat tarikh, menggunakan klausa IN
untuk menapis mengikut ID pengguna. Pertanyaan asal, bagaimanapun, mengetepikan pengguna tanpa aktiviti dalam jangka masa yang ditentukan.
Masalahnya berpunca daripada LEFT JOIN
pertanyaan yang berkelakuan seperti INNER JOIN
disebabkan oleh syarat yang dikenakan pada jadual bercantum (OnlineUseage
). Ini dengan berkesan menapis keluar ID yang tidak terdapat dalam OnlineUseage
semasa julat tarikh yang ditentukan.
Penyelesaian adalah untuk menempatkan semula keadaan julat tarikh daripada klausa JOIN
kepada klausa WHERE
. Ini membolehkan LEFT JOIN
berfungsi dengan betul, termasuk semua ID daripada jadual users
. ID tanpa entri yang sepadan dalam OnlineUseage
kemudiannya akan menerima nilai lalai.
Berikut ialah pertanyaan yang diperbetulkan:
<code class="language-sql">SELECT users.Name, users.ID, IFNULL(SUM(users.Minutes), 0) AS MinutesOnline FROM users LEFT JOIN OnlineUseage ON users.ID = OnlineUseage.ID WHERE users.ID IN (...) -- Your ID list here AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < '2016-01-31 00:00:00';</code>
Pertanyaan yang disemak ini memastikan semua ID dalam klausa IN
disertakan dalam keputusan. Jika ID tidak mempunyai entri yang sepadan dalam OnlineUseage
dalam julat tarikh, IFNULL(SUM(users.Minutes), 0)
memberikan nilai lalai 0 untuk MinutesOnline
. Pendekatan ini berkesan mengendalikan ID yang hilang dan mengembalikan hasil lalai yang diingini, tidak kira sama ada ID tersebut terdapat dalam jadual OnlineUseage
untuk julat tarikh yang ditentukan.
Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Nilai Lalai untuk ID yang Hilang dalam Pertanyaan SQL Menggunakan Klausa IN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!