left join中 限制條件在on和where區別

在多張表連接時,都會生成一張中間表,然後再將這張臨時表返回給用戶。
       在用left join中,on和where條件的區別如下:
       (1)on條件是在生成中間表時使用的條件,它不管on中的條件是否爲真,都會返回左表中的記錄,右表中的記錄如果不符合on條件,則顯示爲空。
       (2)where條件是在中間表生成好之後,再對這張表進行過濾。這時已經和left join沒有關係,不符合where條件的就會被過濾掉。

例子:

表balevent:賬戶餘額表

    month:月份

    ACCOUNT:賬戶

目標:查詢201906月有發生餘額變動的賬號,並且在201907月沒發生餘額變動的賬號

語句一:正確的寫法

select a.ACCOUNT from balevent a left join  balevent b 
    on a.ACCOUNT=b.ACCOUNT and b.MONTH='201907' 
where a.MONTH='201906' and b.ACCOUNT is null ; 

 

語句二:錯誤的寫法,查詢不出來結果

select a.ACCOUNT  from balevent a left join  balevent b 
    on a.ACCOUNT=b.ACCOUNT 
where a.MONTH='201906' and b.MONTH='201907' and b.ACCOUNT is null ; 

注:

  如果是用in和not in語句:

select * from balevent a where account not in (select account from balevent b where b.MONTH='201906')  and A.MONTH='201907';

發佈了22 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章