表格是:
blogs
blog_id, user_id, blog_content
users
user_id, user_name
comments
comment_id, blog_id, user_id, comment_content
我想要做的是:获取:blog_content,创建博客的人的user_name,与特定博客关联的comment_content以及评论作者的user_name。我不知道如何获取最后一个,评论作者的user_name。到目前为止我有这个:
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
我如何在此查询中加入表格注释和用户,并同时获取博客创建者的user_name和评论作者?
答案 0 :(得分:1)
您需要将评论表加入用户表的另一个副本:
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;
在此查询中,所有表都具有表别名。这有助于使查询更具可读性。此外,需要表别名来区分对users
的两个引用。一个参考是针对博客所有者,另一个是针对评论作者。
答案 1 :(得分:0)
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
这次你可以再次加入评论表,给它一个别名,以区别于之前的评论表。
答案 2 :(得分:0)
您可以在同一个表上拥有多个联接。每个连接将从该表中检索另一组数据。为了在单个查询中多次包含同一个表,您必须为至少一个副本创建alias,以便SQL在尝试从列中检索数据时知道您指的是哪一个。 / p>
由于您需要为撰写评论的用户获取用户名,我建议您再次加入用户表,如下所示:
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