Sql 需要查询以选择具有作者姓名的特定注释

Sql 需要查询以选择具有作者姓名的特定注释,sql,database,postgresql,select,Sql,Database,Postgresql,Select,我的数据库包含3个表,如下所示: CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(30) NOT NULL, password VARCHAR(60) NOT NULL, phone VARCHAR(10) NOT NULL, email VARCHAR(30) UNIQUE ); CREATE TABLE posts ( id SERIAL PRIMARY KEY, b

我的数据库包含3个表,如下所示:

CREATE TABLE users
(
    id SERIAL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    password VARCHAR(60) NOT NULL,
    phone VARCHAR(10) NOT NULL,
    email VARCHAR(30) UNIQUE
);

CREATE TABLE posts 
(
    id SERIAL PRIMARY KEY,
    body TEXT NOT NULL,
    user_id INTEGER REFERENCES users(id) 
);

CREATE TABLE comments
(
    id SERIAL PRIMARY KEY,
    body TEXT NOT NULL,
    post_id INTEGER REFERENCES posts(id),
    user_id INTEGER REFERENCES users(id)
    -- parent_id INTEGER REFERENCES comments(id)
);
我需要一个查询来选择一个特定的职位使用此职位id的所有评论。让我苦苦挣扎的是如何选择写评论的用户的名字

这就是我所尝试的:

select  
    c.body as cbody, p.body as pbody, c.user_id as user_id 
from 
    users u 
inner join 
    posts p on u.id = p.user_id 
inner join 
    comments c on c.post_id = p.id 
where 
    p.id=($1)

任何帮助???

我将使用Comments表作为FROM子句中的第一个表,因为这是查询数据的主表。(只是个人喜好,不是要求。)

之后,我将加入Comments.user_id上的Users表,以获取评论的作者

你可能不希望每篇评论都包含帖子的正文,所以我不想这样

因此,我的查询如下所示:

SELECT c.body AS cbody, c.user_id AS user_id, u.name AS uname
FROM Comments c LEFT JOIN Users u ON u.id = c.user_id
WHERE c.post_id=($1);

内部联接也可能有效,但您需要确保始终填写Comments.user\u id。当Comments.user_id为NULL时,使用内部联接时,该注释将不会包含在查询结果中。

当前查询有什么问题?我无法返回编写注释的用户的正确名称@TimBiegeleisenI无法返回撰写评论的用户的正确名称@TimBiegeleisenThis很酷,但是我需要显示特定帖子id的所有评论。所以我需要添加条件“where”!我在哪里以及如何才能做到这一点@巴顿只是加了一句。很抱歉给您带来不便。我从查询中删除了原始帖子的正文,因为IMHO您的查询应该只获取特定帖子的评论数据。如果您需要有关文章的具体细节,如文章正文和文章作者,我将为此执行单独的SELECT查询。在一个查询中高效地获取所有帖子和评论数据是不可能的(如果不在结果中复制大量数据)。