Kod T-SQL yang disediakan bertujuan untuk melakukan gabungan kiri antara dua jadual, #appSteps dan #appProgress, tetapi keputusan ditetapkan mengandungi hanya dua baris dan bukannya yang dijangkakan tiga.
Isu
Isu timbul kerana jadual sebelah kanan (#appProgress) disertakan dalam klausa WHERE:
where s.section is not null and p.appId = 101
Penjelasan
SERTAI KIRI bertujuan untuk mengembalikan semua baris dari jadual kiri, termasuk yang tidak sepadan dengan rekod dalam jadual kanan. Walau bagaimanapun, dengan memasukkan jadual sebelah kanan dalam klausa WHERE, pertanyaan berfungsi dengan berkesan seperti INNER JOIN, menapis keluar baris dari jadual kiri tanpa sepadan dengan rekod dalam jadual kanan.
Penyelesaian
Untuk mendapatkan set hasil yang diingini, alihkan keadaan penapis untuk jadual sebelah kanan ke klausa HIDUP KIRI SERTAI:
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 meletakkan syarat dalam klausa ON, baris yang sepadan daripada kedua-dua jadual dicantumkan dahulu, dan kemudian klausa WHERE digunakan untuk menapis keputusan selanjutnya, memastikan bahawa hanya baris dengan bukan nol nilai untuk bahagian dikembalikan.
Atas ialah kandungan terperinci Mengapa T-SQL LEFT JOIN saya hanya mengembalikan dua baris dan bukannya tiga?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!