Rumah > pangkalan data > tutorial mysql > Mengapa Sambungan Luar Kiri Saya Gagal Apabila Menambah Parameter Tarikh pada Klausa WHERE?

Mengapa Sambungan Luar Kiri Saya Gagal Apabila Menambah Parameter Tarikh pada Klausa WHERE?

Linda Hamilton
Lepaskan: 2025-01-17 14:16:10
asal
608 orang telah melayarinya

Why Does My Left Outer Join Fail When Adding Date Parameters to the WHERE Clause?

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan