MySQL join連表查詢示例

weixin_33936401發表於2018-09-28

先給出一些資料庫表,方便大家直觀感受。
當前需求:在後臺展示 某俱樂部在某時間段的玩家個人資訊以及消耗資訊

ClubInfo : 俱樂部

ClubID ClubName
30005 小帥哥俱樂部
30100 GTT

ClubUserInfo : 俱樂部-玩家,玩家可加入多個俱樂部。

ClubID UserID Level
30005 1003 13
30005 1004 0
30005 1005 2
30100 1003 5
30100 1010 8

CostInfo : 玩家消耗,每次消耗單獨記錄。

ClubID UserID CostMoney Time
30005 1003 20 2018-09-26 11:15:45
30005 1004 1 2018-03-07 11:00:00
30005 1003 101 2018-09-11 10:00:00
30005 1005 45 2018-09-05 10:02:20
30100 1003 23 2017-02-05 12:04:20
30100 1003 3 2018-09-05 11:14:10
30100 1010 70 2017-11-05 19:14:10

AccountsInfo : 玩家個人資訊,全域性統一

UserID NickName FaceUrl Age Sex
1003 火燒風 t.cn/4afs45 28 1
1004 暖暖 t.cn/s655w5 23 0
1005 t.cn/56sgz 19 1
1010 藍天白雲 t.cn/y633 35 1

假如要查詢俱樂部 30005 在 2018-09-01 到 2018-09-30 的資訊,現在連表查詢語句如下:

select A.*, B.CostMoney, C.NickName  from ClubInfo as A 
left join (
  select UserID, sum(CostMoney) as Cost from CostInfo 
  where datediff( Time, '2018-09-01') >= 0 and datediff( Time, '2018-09-01')  <  30
  group by UserID 
) as B on ( A.UserID = B.UserID)
join (
  select UserID, NickName from AccountsInfo 
) as C on ( A.UserID = C.UserID)
where A.ClubID = 30005 ;

結果如下:

ClubID UserID Level CostMoney NickName
30005 1003 13 121 火燒風
30005 1004 0 暖暖
30005 1005 2 45

可以看到 left join 允許右側表空缺資料

相關文章