Apabila menggunakan LEFT JOIN dalam SQL, adalah penting untuk mengenali ciri uniknya dan potensi perangkap . Soalan ini menggambarkan contoh di mana pertanyaan LEFT JOIN mengembalikan hasil yang tidak dijangka, mendorong kami untuk menyelidiki mekanik asas dan menyelesaikan isu tersebut.
Operasi LEFT JOIN mengambil semua baris dari jadual kiri (dalam kes ini, #appSteps) tidak kira sama ada ia sepadan dengan jadual yang betul (#appProgress). Mana-mana baris yang tidak sepadan dalam jadual kanan diberikan nilai NULL. Walau bagaimanapun, apabila anda memasukkan jadual yang betul dalam klausa WHERE (p.appId = 101), anda pada asasnya mengubah pertanyaan menjadi JOIN DALAM.
Penyelesaian:
Untuk membetulkan masalah, predikat yang menapis jadual yang betul (p.appId = 101) perlu dialihkan daripada klausa WHERE kepada syarat ON pernyataan LEFT JOIN. Ini memaksa cantuman untuk menapis jadual yang betul sebelum melakukan cantuman, memastikan bahawa hanya baris yang sepadan disertakan.
Pernyataan SQL yang dilaraskan adalah seperti berikut:
Select P.appId, S.stepId, S.section, P.start From #appSteps S With (NoLock) Left Join #appProgress P On S.stepId = P.stepId And P.appId = 101 Where S.section Is Not Null
Dengan melaraskan pertanyaan kepada menggunakan fungsi LEFT JOIN dengan betul, ia akan menghasilkan hasil yang diharapkan, termasuk semua baris bukan nol daripada #appSteps dan memadankan baris daripada #appProgress, tanpa mengecualikan baris secara tidak sengaja disebabkan oleh predikat tambahan dalam klausa WHERE.
Atas ialah kandungan terperinci Mengapa saya LEFT JOIN dalam SQL Mengembalikan Keputusan Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!