《Mysql必讀MySQL在右表數(shù)據(jù)不唯一的情況下使用left join的方法》要點(diǎn):
本文介紹了Mysql必讀MySQL在右表數(shù)據(jù)不唯一的情況下使用left join的方法,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
1.left join 基本用法MYSQL必讀
mysql left join 語(yǔ)句格式
A LEFT JOIN B ON 條件表達(dá)式MYSQL必讀
left join 是以A表為基礎(chǔ),A表即左表,B表即右表.
左表(A)的記錄會(huì)全部顯示,而右表(B)只會(huì)顯示符合條件表達(dá)式的記錄,如果在右表(B)中沒有符合條件的記錄,則記錄不足的地方為NULL.MYSQL必讀
例如:news 與 news_category表的結(jié)構(gòu)如下,news表的category_id與news_category表的id是對(duì)應(yīng)關(guān)系.MYSQL必讀
news 表
MYSQL必讀
MYSQL必讀
news_category 表
MYSQL必讀
MYSQL必讀
顯示news表記錄,并顯示news的category名稱,查詢語(yǔ)句如下MYSQL必讀
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;
查詢結(jié)果如下:
MYSQL必讀
MYSQL必讀
因 news_category 表沒有id=4的記錄,因此news 表中category_id=4的記錄的category_name=NULLMYSQL必讀
使用left join, A表與B表所顯示的記錄數(shù)為 1:1 或 1:0,A表的所有記錄都會(huì)顯示,B表只顯示符合條件的記錄.MYSQL必讀
2.left join 右表數(shù)據(jù)不唯一解決方法MYSQL必讀
但如果B表符合條件的記錄數(shù)大于1條,就會(huì)出現(xiàn)1:n的情況,這樣left join后的結(jié)果,記錄數(shù)會(huì)多于A表的記錄數(shù).MYSQL必讀
例如:member與member_login_log表的結(jié)構(gòu)如下,member記錄會(huì)員信息,member_login_log記錄會(huì)員每日的登入記錄.member表的id與member_login_log表的uid是對(duì)應(yīng)關(guān)系.MYSQL必讀
member 表
MYSQL必讀
MYSQL必讀
member_login_log 表
MYSQL必讀
MYSQL必讀
查詢member用戶的資料及最后登入日期:
如果直接使用left joinMYSQL必讀
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),所以最后得出的記錄為:
MYSQL必讀
MYSQL必讀
但這并不是我們要的結(jié)果,因此這種情況需要保證B表的符合條件的記錄是空或唯一,我們可以使用group by來(lái)實(shí)現(xiàn).MYSQL必讀
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;
MYSQL必讀
總結(jié):使用left join的兩個(gè)表,最好是1:1 或 1:0的關(guān)系,這樣可以保證A表的記錄全部顯示,B表顯示符合條件的記錄.
如果B表符合條件的記錄不唯一,就需要檢查表設(shè)計(jì)是否合理了.MYSQL必讀
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/1055.html