Percanggahan Sertai Kiri: Baris Ditinggalkan
Dalam pertanyaan ini, JOIN KIRI antara jadual #appSteps dan #appProgress tidak berfungsi, mengakibatkan pengecualian baris yang dijangkakan daripada hasilnya ditetapkan.
Pertanyaan dalam Soalan:
select p.appId, s.stepId, s.section, p.start from #appSteps s with (nolock) left join #appProgress p on s.stepId = p.stepId where s.section is not null and p.appId = 101
Hasil Jangkaan:
appId | stepId | section | start |
---|---|---|---|
101 | 1 | Section 1 | 2016-01-03 00:00:00.000 |
101 | 2 | Section 2 | 2016-01-03 00:00:00.000 |
101 | 10 | Section 3 | NULL |
Sebenar Keputusan:
appId | stepId | section | start |
---|---|---|---|
101 | 1 | Section 1 | 2016-01-03 00:00:00.000 |
101 | 2 | Section 2 | 2016-01-03 00:00:00.000 |
Penyelesaian:
Tingkah laku yang salah timbul daripada memasukkan jadual sebelah kanan (#appProgress) dalam klausa WHERE. Dengan mengalihkan syarat ini ke klausa ON LEFT JOIN, hasil yang diingini boleh dicapai:
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
Dalam LEFT JOIN, klausa WHERE dilaksanakan selepas cantuman, bermakna baris dari kanan- jadual tangan yang tidak memenuhi kriteria klausa WHERE akan dikecualikan daripada set hasil. Memasukkan jadual sebelah kanan dalam klausa WHERE dengan berkesan mengubahnya menjadi JOIN DALAM, menapis hasil yang dijangkakan.
Atas ialah kandungan terperinci Mengapa Baris Tiada daripada Keputusan Sertai Kiri saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!