MySQL左右連接查詢中的NULL的數據篩選問題


這里使用左連接為例子,對於左連接是將左邊表的數據顯示,右邊表中如果沒有對應的數據則使用null填充。

game表:

game_type表:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id

這里的語句得到的內容:

 

這里我們如果想將沒有游戲類型的游戲信息去掉:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name!=''

也可以這樣:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where not ISNULL(t.type_name)

 

上面兩條語句得到的結果是一樣的,事實上准確點來說是應該使用第二條,因為如果在game表中的游戲5記錄對應的type_id是一個沒有type_name的類型,如下圖:

game表:

game_type表:

 

使用語句:SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name!=''得到的結果:

但是游戲5是有游戲類型的,只是游戲類型為空。所以這時候使用下面語句得到的結果才是正確的:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where not ISNULL(t.type_name)

這里我們將game表中的游戲5記錄對應的type_id記錄設置為0,那么使用:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id

得到的內容:

假如這里我們想將游戲5的記錄篩選出來,就是篩選游戲表中沒有對應的游戲類型記錄:

因為剛剛我們使用語句:SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name!=''

可以將游戲5篩選掉,那么這里如果我們設置成下面這樣:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name=''

 

結果不能游戲5給篩選出來,這時候需要的是:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where ISNULL(t.type_name)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM