加入三个表并使用其中一个表

时间:2016-12-19 20:58:00

标签: sql join

我正在努力提高自己的查询能力,而且我一直无法绕过中等复杂度的连接。为了尽可能简洁明了,我想加入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语句?如果我错了,有人可以纠正我,也许可以直接指导我吗?欣赏它!

1 个答案:

答案 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