mysql一对多连表查询导致重复记录的解决方案

  • Post author:
  • Post category:mysql


user表:

在这里插入图片描述

user_book表:

在这里插入图片描述

user表与user_book表的关系:一对多(通过user_book的userid外键关联)

select user.*,user_book.* 
from user 
    left join user_book on user.id=user_book.userid;

查询结果:

在这里插入图片描述

user1对应了2条记录

select user.*,user_book.*
from user
    left join user_book on user.id=user_book.userid
group by user.id

查询结果:

在这里插入图片描述

user1只有一条记录(第二条记录没有了)

用group by user.id的前提是在MySQL取消sql_mode=only_full_group_by的模式,否则sql会报错。

3.如果想查的不是第一条记录,而是最新的book记录(createtime最大),则:

select user.*,user_book.*
from user
    left join (select max(createtime) maxCreatetime,userid from user_book group by userid) ub_temp on ub_temp.userid=user.id -- 取最新的记录
    left join user_book on user_book.userid=ub_temp.userid and user_book.createtime=ub_temp.maxCreatetime

查询结果:

在这里插入图片描述



版权声明:本文为u013813491原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。