我正在努力提高自己的查询能力,而且我一直无法绕过中等复杂度的连接。为了尽可能简洁明了,我想加入3个表。第一个联接选择用户上所有用户的帖子.User_ID = posts.FK_User_ID
**User table**
User_ID pk
username int
email
etc...
**Post Table**
post_ID PK
User_ID FK
Post
etc...
**Like Table**
FK_User_ID references user.user_ID
FK_Post_ID references post.Post_ID (*This is what I want to count*)
之后我想引用第三个表。此表包含user表的user_ID的外键和引用表中的主键Post_ID的FK_Post_ID的外键。第三个表是喜欢该帖子的用户的链接表。我想计算此表中所有匹配的帖子ID,并将其附加到初始用户中的每个帖子并发布连接,以便输出结果如下所示:
User_id Username Post_ID Post Number_of_Likes
1 bob 4 'foo' 18
我在这两个表之间的第一次连接工作并且看起来像这样(例如用*简化)
select * from users
join post
on post.User_ID=users.User_ID
现在我需要一种方法来引用第三个表来计算post id出现在like表中的总次数,并将其附加到每一行。这就是我迷失的地方,我一直在尝试很多事情而没有运气。我相信我需要为第二次连接构造一个内连接子句,或者我需要拉出一个嵌套的select语句?如果我错了,有人可以纠正我,也许可以直接指导我吗?欣赏它!
答案 0 :(得分:1)
执行此操作的常用方法是创建具有计数和密钥的子查询,然后加入该查询。像这样:
select *
from users
join post on post.FK_User_ID=users.User_ID
left join (
select FK_Post_ID, count(*) as count_of_likes_on_a_post
from likestable
group by FK_Post_ID
) likes on post.Post_ID = likes.FK_Post_ID