Sql 查詢語句應用左連接時的鏈接條件中經常加一些常量值在里面如:
“On a.id= b.id and b.is_del =0 and b.is_old =1” 這種條件如果加在表與表之間連接后的where條件中時有什么不一樣呢?
答:其實仔細想想我們都能想到,左連接的目的是要取左邊的所有數據,如果條件中右邊表中的字段與左邊表中的字段是一對一關系,那連接時要保證右邊數據不為null,只能讓”a.id = b.id and b.is_del =0,b.is_old=1”;否則即使a.id=b.id 滿足條件同樣右邊的數據只能用null來補全,這種情況下如果左邊有10條數據,右邊只有7條數據完全符合條件,那結果就是有10條數據顯示出來只不過有三條數據右邊表中的數據是null;如果將此b.is_del = 0 and b.is_old =1 放在where后面那么就會發現結果中一共有7條數據那三條空數據已經被刪除了,這就是區別。
總結一下規律:
放在on里面就是先篩選后連接,保證連接左邊數據完整;放在where中就得先連接后篩選。
如果使用INNER JOIN 效果是一樣的所以建議同一放在where 條件后面。