Mysql sql-连接同一列上的3个表

Mysql sql-连接同一列上的3个表,mysql,sql,Mysql,Sql,各表如下: blogs blog_id, user_id, blog_content users user_id, user_name comments comment_id, blog_id, user_id, comment_content 我想做的是获取:博客内容、创建博客的人的用户名、与特定博客相关的评论内容以及评论作者的用户名。我不知道如何得到最后一个,评论作者的用户名。到目前为止,我有: SELECT blogs.user_id, blogs.blog_id, blogs.bl

各表如下:

blogs
blog_id, user_id, blog_content

users
user_id, user_name

comments
comment_id, blog_id, user_id, comment_content
我想做的是获取:博客内容、创建博客的人的用户名、与特定博客相关的评论内容以及评论作者的用户名。我不知道如何得到最后一个,评论作者的用户名。到目前为止,我有:

SELECT blogs.user_id, blogs.blog_id, blogs.blog_content, 
            users.user_id, users.name, 
            comments.comment_id, comments.blog_id, comments.user_id, comments.comment_content 
            FROM blogs 
            LEFT JOIN users ON users.user_id = blogs.user_id 
            LEFT JOIN comments ON comments.blog_id = blogs.blog_id 
            WHERE blogs.blog_id = 2
我如何在这个查询中加入表comments和users,并获得blog创建者和comments编写者的用户名

SELECT blogs.user_id, blogs.blog_id, blogs.blog_content, 
            users.user_id, users.name, 
            comments.comment_id, comments.blog_id, comments.user_id, comments.comment_content 
            FROM blogs 
            LEFT JOIN users ON users.user_id = blogs.user_id 
            LEFT JOIN comments ON comments.blog_id = blogs.blog_id 
            LEFT JOIN comments c  ON c.user_id=users.user_id
            WHERE blogs.blog_id = 2

这一次,您可以再次执行joincomments表,给它一个别名以区别于以前的comments表。

您需要将comments表连接回users表的另一个副本:

SELECT b.user_id, b.blog_id, b.blog_content, 
       u.user_id, u.name, 
       c.comment_id, c.blog_id, c.user_id, c.comment_content ,
       uc.name as commentor_name
FROM blogs b LEFT JOIN
     users u
     ON u.user_id = b.user_id LEFT JOIN
     comments c
     ON c.blog_id = b.blog_id LEFT JOIN
     comments uc
     on c.user_id = uc.user_id
WHERE b.blog_id = 2;

在此查询中,所有表都有表别名。这有助于使查询更具可读性。此外,还需要表别名来区分对
用户的两个引用。一个是博客所有者的参考,另一个是评论作者的参考。

在同一个表上可以有多个连接。每个联接将从该表中检索另一组数据。为了在一个查询中多次包含同一个表,必须为至少一个副本创建一个副本,以便SQL在尝试从其列检索数据时知道所引用的副本

由于您需要获得撰写评论的用户的用户名,因此我建议再次加入用户表,如下所示:

SELECT blogs.user_id,
       blogs.blog_id,
       blogs.blog_content, 
       users.user_id,
       users.name, 
       comments.comment_id,
       comments.blog_id,
       comments.user_id,
       comments.comment_content ,
       comment_writers.name as CommentUserName
FROM blogs 
LEFT JOIN users ON users.user_id = blogs.user_id 
LEFT JOIN comments ON comments.blog_id = blogs.blog_id
LEFT JOIN users AS comment_writers ON comment_writers.user_id = comments.user_id
WHERE blogs.blog_id = 2

问题是如何获得评论作者的用户名。他已经从
comments
表中检索到了所需的所有内容,并且不需要包含第二份副本。