Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 连接三个表并在其中一个表上使用Count_Sql_Join - Fatal编程技术网

Sql 连接三个表并在其中一个表上使用Count

Sql 连接三个表并在其中一个表上使用Count,sql,join,Sql,Join,我正在努力提高我的查询能力,但我在处理中等复杂度的连接时遇到了困难。为了尽可能的清晰和简洁,我尝试连接3个表。第一个联接从用户上的所有用户中选择帖子。User\u ID=posts.FK\u User\u 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 use

我正在努力提高我的查询能力,但我在处理中等复杂度的连接时遇到了困难。为了尽可能的清晰和简洁,我尝试连接3个表。第一个联接从用户上的所有用户中选择帖子。User\u ID=posts.FK\u User\u 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表中主键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语句?如果我错了,有人能纠正我的错误,或者直接引导我正确的方向吗?谢谢你

一种常见的方法是创建一个包含counts和key的子查询,然后加入到该子查询中。像这样:

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

您可以标记正在使用的dbms吗?您或者必须在联接之前通过子查询从第三个表中获取计数,或者使用第三个表中的countDistinct Primary.keyField,或者使用窗口函数计数除以字段,使逻辑键DBMS和版本有助于定义哪些选项可供您使用,尽管子查询将在所有RDBMS中工作。考虑发布表定义和一些示例数据,除了预期输出。您不会告诉我们第三个表的名称或该表的任何列名。“这种遗漏会使问题很难回答。”霍根添加了表结构,第一次就忘了。很抱歉,谢谢你的评论