程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL在右表數據不唯一的情況下使用left join的方法,mysqljoin

MySQL在右表數據不唯一的情況下使用left join的方法,mysqljoin

編輯:MySQL綜合教程

MySQL在右表數據不唯一的情況下使用left join的方法,mysqljoin


1.left join 基本用法

mysql left join 語句格式
A LEFT JOIN B ON 條件表達式

left join 是以A表為基礎,A表即左表,B表即右表。
左表(A)的記錄會全部顯示,而右表(B)只會顯示符合條件表達式的記錄,如果在右表(B)中沒有符合條件的記錄,則記錄不足的地方為NULL。

例如:news 與 news_category表的結構如下,news表的category_id與news_category表的id是對應關系。

news 表

201633162112696.png (717×128)

news_category 表

201633162135707.png (136×97)

顯示news表記錄,並顯示news的category名稱,查詢語句如下

select a.id,a.title,b.name as category_name,a.content,a.addtime,a.lastmodify  
from news as a left join news_category as b  
on a.category_id = b.id; 

查詢結果如下:

201633162200297.png (703×124)

因 news_category 表沒有id=4的記錄,因此news 表中category_id=4的記錄的category_name=NULL

使用left join, A表與B表所顯示的記錄數為 1:1 或 1:0,A表的所有記錄都會顯示,B表只顯示符合條件的記錄。

2.left join 右表數據不唯一解決方法

但如果B表符合條件的記錄數大於1條,就會出現1:n的情況,這樣left join後的結果,記錄數會多於A表的記錄數。

例如:member與member_login_log表的結構如下,member記錄會員信息,member_login_log記錄會員每日的登入記錄。member表的id與member_login_log表的uid是對應關系。

member 表

201633162221215.png (128×70)

member_login_log 表

201633162239610.png (209×144)

查詢member用戶的資料及最後登入日期:
如果直接使用left join

select a.id, a.username, b.logindate 
from member as a  
left join member_login_log as b on a.id = b.uid; 

因member_login_log符合條件的記錄比member表多(a.id = b.uid),所以最後得出的記錄為:

201633162255876.png (260×141)

但這並不是我們要的結果,因此這種情況需要保證B表的符合條件的記錄是空或唯一,我們可以使用group by來實現。

select a.id, a.username, b.logindate 
from member as a  
left join (select uid, max(logindate) as logindate from member_login_log group by uid) as b 
on a.id = b.uid; 

201633162313453.png (233×91)

總結:使用left join的兩個表,最好是1:1 或 1:0的關系,這樣可以保證A表的記錄全部顯示,B表顯示符合條件的記錄。
如果B表符合條件的記錄不唯一,就需要檢查表設計是否合理了。

您可能感興趣的文章:

  • MySQL表LEFT JOIN左連接與RIGHT JOIN右連接的實例教程
  • MySQL的LEFT JOIN表連接的進階學習教程
  • mysql:Can''t start server: can''t create PID file: No space left on device
  • MySQL Left JOIN時指定NULL列返回特定值詳解
  • 解析mysql left( right ) join使用on與where篩選的差異
  • 深入理解mysql之left join 使用詳解
  • mysql not in、left join、IS NULL、NOT EXISTS 效率問題記錄
  • 超詳細mysql left join,right join,inner join用法分析

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved