MySQL join连表查询示例

2018-09-28  本文已影响23人  f68c8a455b56

先给出一些数据库表,方便大家直观感受。
当前需求:在后台展示 某俱乐部在某时间段的玩家个人信息以及消耗信息

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 允许右侧表空缺数据

上一篇 下一篇

猜你喜欢

热点阅读