Menyelesaikan masalah JOIN LUAR KIRI dengan Penapis Tarikh
Pertanyaan SQL ini menggunakan LEFT OUTER JOIN merentas tiga jadual: salesrep
, prescriber
dan prescriptions
. Matlamatnya ialah untuk mendapatkan semula semua data daripada salesrep
, walaupun tiada entri yang sepadan dalam prescriber
atau prescriptions
. Masalah timbul apabila parameter tarikh ditambahkan pada klausa WHERE
. Daripada memulangkan semua salesrep
data seperti yang dijangkakan, pertanyaan hanya mengembalikan hasil yang terdapat padanan dalam ketiga-tiga jadual.
Isu ini berpunca daripada penapisan pada prescriptions.filldate
dalam klausa WHERE
. Keadaan ini dengan berkesan mengubah LEFT OUTER JOIN menjadi INNER JOIN untuk entri salesrep
yang tidak mempunyai data prescriptions
sepadan, kerana klausa WHERE
menghapuskan baris dengan nilai NULL
untuk prescriptions.filldate
.
Penyelesaian: Pindahkan Penapis Tarikh kepada Keadaan JOIN
Pendekatan yang betul adalah untuk mengalihkan kekangan tarikh daripada klausa WHERE
ke dalam klausa ON
LEFT OUTER JOIN antara prescriber
dan prescriptions
. Ini memastikan bahawa penapisan tarikh hanya mempengaruhi cantuman antara kedua-dua jadual ini, sementara masih mengekalkan tingkah laku yang dimaksudkan untuk LEFT OUTER JOIN berkenaan dengan salesrep
.
Caburan yang dibetulkan sepatutnya kelihatan seperti ini:
<code class="language-sql">LEFT OUTER JOIN prescriptions ON prescriber.dea_no = prescriptions.dea_no AND prescriptions.filldate >= '09-01-12' AND prescriptions.filldate <= '09-17-12'</code>
Dengan meletakkan sekatan tarikh dalam klausa ON
, baris daripada salesrep
akan disertakan dalam keputusan walaupun tiada entri sepadan dalam prescriptions
yang memenuhi kriteria tarikh. Baris ini hanya akan mempunyai nilai NULL
untuk lajur daripada prescriber
dan prescriptions
. Ini menggambarkan dengan tepat tingkah laku yang diingini oleh LEFT OUTER JOIN.
Atas ialah kandungan terperinci Mengapa Sambungan Luar Kiri Saya Gagal Apabila Menambah Parameter Tarikh pada Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!