SQL 语句 连表查询 问题?

连表查询, 三个表,一个用户表(user ),一个 浏览历史表(browse_history),一个用户收藏表(user_collect)。

浏览历史表、用户收藏表,都与用户表关联,里面 都有字段userid ,

要求: 连表查询,根据 用户id,查询用户信息,和该用户的,浏览历史数量, 和 收藏数量。注意:就算该用户没有 浏览历史和 收藏。也要查询出用户表的基本信息。

用户表1:
id username
01 机构1
02 机构2
03 机构2-1

浏览历史表:
id productid userid datetime
1 3 01
2 4 01
3 6 02
4 3 02

用户收藏表:
id productid userid datetime
1 6 01
3 3 02

SELECT u.*, u.username,bh.datetime,COUNT(bh.id) AS BHSum,uc.datetime,COUNT(uc.id) AS UCSum
from user u
left join browse_history bh on u.id=bh.userid
left join user_collect uc on u.id=uc.userid
WHERE u.id='01'
根据userid 01,查询出来的结果,用户 浏览历史数量, 和 收藏数量,都为2, 。用户收藏数量错了,应该为1.请问,大神们怎么改 sql 语句。

阅读 4.3k
2 个回答
select *
from user TM
left join
{
    select count(*),userid
    from browse_history bh
    group by userid
}T1 on TM.id=T1.userid
left join
(
    select count(*),userid
    from user_collect uc
    group by userid
)T2 on TM.id=T1.userid

思路:先将历史表和收藏表按用户分组,然后再去连表.查询可能不对,思路应该是对的.

SELECT u.*,
u.username,
(SELECT count(1) FROM browse_history bh where u.id = bh.userid) AS BHSum,
(SELECT count(1) FROM user_collect uc where u.id = uc.userid) AS UCSum
from user u
WHERE u.id = '01'

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题