Menyelesaikan masalah keputusan pertanyaan LEFT OUTER JOIN yang tidak konsisten
Dalam SQL, operasi LEFT OUTER JOIN direka untuk mengekalkan data dalam jadual kiri walaupun data yang sepadan tidak wujud dalam jadual kanan. Walau bagaimanapun, ia boleh mengelirukan apabila LEFT OUTER JOIN tidak menghasilkan keputusan yang diharapkan.
Katakan anda perlu mendapatkan semula data daripada tiga jadual menggunakan LEFT OUTER JOIN. Anda ingin mendapatkan maklumat daripada jadual Salesrep walaupun tiada rekod sepadan wujud dalam jadual Prescriber dan Preskripsi. Apabila melaksanakan pertanyaan ini dengan parameter tarikh dalam klausa WHERE, anda menemui hasil yang tidak dijangka: tiada baris dikembalikan untuk wakil jualan yang tidak dikaitkan dengan sebarang data.
Untuk menyelesaikan masalah ini, kuncinya adalah untuk mengalihkan kekangan Prescriptions.filldate dari klausa WHERE kepada ON syarat JOIN. Pertanyaan yang diubah suai sepatutnya kelihatan serupa dengan yang berikut:
<code class="language-sql">LEFT OUTER JOIN prescriptions ON prescriber.dea_no = prescriptions.dea_no AND prescriptions.filldate >= '09-01-12' AND prescriptions.filldate < '10-01-12'</code>
Pada mulanya, rekod dengan nilai NULL dalam Prescriptions.filldate telah tersalah ditapis apabila parameter tarikh berada dalam klausa WHERE. Dengan memasukkannya dalam keadaan ON, wakil jualan akan tetap disertakan dalam set keputusan walaupun tiada butiran preskripsi yang berkaitan, dan nilai NULL akan dipaparkan dengan sewajarnya.
Kini, apabila melaksanakan pertanyaan, anda akan berjaya memperoleh maklumat jadual Salesrep tanpa mengira data yang sepadan dalam jadual Prescriber dan Preskripsi.
Atas ialah kandungan terperinci Mengapa SERTAI LUAR KIRI Saya Gagal Mengembalikan Hasil Yang Dijangka Apabila Menggunakan Penapis Tarikh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!