Menyahpepijat Gagal LEFT OUTER JOIN dengan Penapisan Tarikh
Cabaran pertanyaan SQL biasa melibatkan penggunaan LEFT OUTER JOIN
dengan penapis tarikh. Jangkaan ialah data daripada jadual kiri (cth., Salesrep
) dikembalikan walaupun tiada data yang sepadan dalam jadual kanan (Prescriber
dan Prescriptions
). Walau bagaimanapun, menambahkan penapis tarikh pada klausa WHERE
boleh menapis rekod secara tidak dijangka daripada jadual sebelah kiri.
Memahami Isu:
Masalah timbul daripada lokasi keadaan julat tarikh. Meletakkannya dalam fasal WHERE
salah menapis hasil selepas gabungan, dengan berkesan mengalih keluar baris dari jadual kiri yang kekurangan entri sepadan dalam julat tarikh yang ditentukan.
Pendekatan yang Betul:
Untuk mengekalkan integriti LEFT OUTER JOIN
, kriteria julat tarikh hendaklah dimasukkan ke dalam klausa ON
bagi gabungan itu sendiri. Ini memastikan penapisan berlaku semasa gabungan, mengekalkan semua rekod dari jadual kiri, tanpa mengira preskripsi yang sepadan dalam julat tarikh.
Pertanyaan Disemak:
LEFT OUTER JOIN prescriptions ON prescriber.dea_no = prescriptions.dea_no AND prescriptions.filldate >= '09-01-12' AND prescriptions.filldate <= '09-30-12'
Dengan menempatkan semula penapis tarikh ke klausa ON
, pertanyaan mengembalikan semua data daripada jadual Salesrep
dengan tepat, termasuk wakil jualan tanpa preskripsi dalam tempoh masa yang ditetapkan. Ini melaksanakan tingkah laku yang diharapkan daripada LEFT OUTER JOIN
dengan betul.
Atas ialah kandungan terperinci Mengapakah LEFT OUTER JOIN Saya Tidak Berfungsi dengan Penapis Tarikh dalam Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!