今天,在對兩張表進行left join時候,總是查詢少結果,並不是所要的答案,原來的語句:
group by aa.RoomId, bb.SectionID
結果只顯示了276條,缺少了4條結果,這4條結果中的第二列SectionID 爲NULL;後來經頭提點,把語句改成:
group by aa.RoomId, bb.SectionID
這樣得出的結果正是我要的280條記錄,包括第二列SectionID 爲NULL的記錄。以上的查詢方式,你是否看出了點貓膩?貓膩就在 and bb.ParentID != '00000000' 這個條件是加在where之前還是之後,先說加在之後吧,之後是表示先對這兩張表進行了join,然後在此結果集中再進行where條件篩選,而在SQLServer中爲NULL值列的判斷就認爲是true了,所以那4條爲NULL的記錄就查詢不出來了;反而要是把那個條件加在了where子句之前,則是先對此條件進行篩選後再進行join,而本身表bb此字段是不會有NULL值的,這樣進行join後的值就會有第二列SectionID 爲NULL的記錄,也就是說查詢後的涉及到join後的那張表的字段的條件應該都在where之前加上。這樣想以後其實這條語句還可以修改爲:
where aa.del = 0 and (bb.ParentID is null or bb.ParentID != '00000000')
group by aa.RoomId, bb.SectionID
不過,語句還不如上一個簡潔。