99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
2018-10-30 閱讀量: 1064
mysql left join 右表數(shù)據(jù)不唯一的情況解決方法

如果B表符合條件的記錄數(shù)大于1條,就會出現(xiàn)1:n的情況,這樣left join后的結(jié)果,記錄數(shù)會多于A表的記錄數(shù)。

例如:A與B表的結(jié)構(gòu)如下,A記錄會員信息,B記錄會員每日的登入記錄。A表的id與B表的uid是對應(yīng)關(guān)系。

A

id	username
1 fdipzone
2 terry

B

id	uid	logindate
1 1 2015-01-01
2 2 2015-01-01
3 1 2015-01-02
4 2 2015-01-02
5 2 2015-01-03

查詢A用戶的資料及最后登入日期:

如果直接使用left join

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

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

id	username	logindate
1 fdipzone 2015-01-01
1 fdipzone 2015-01-02
2 terry 2015-01-01
2 terry 2015-01-02
2 terry 2015-01-03

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

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

id username logindate
1 fdipzone 2015-01-02
2 terry 2015-01-03

使用left join的兩個表,最好是1:1 或 1:0的關(guān)系,這樣可以保證A表的記錄全部顯示,B表顯示符合條件的記錄。

如果B表符合條件的記錄不唯一,就需要檢查表設(shè)計是否合理了。

0.0000
6
關(guān)注作者
收藏
評論(0)

發(fā)表評論

暫無數(shù)據(jù)
推薦帖子