SQL:正确的连接语法

Mar*_*ser 2 sql oracle syntax join

假设我有两个表,一个有博客帖子,另一个有读者和他们的评论:

表格1:

表名:BlogPosts:

结构体:

id (int)

title (string)
Run Code Online (Sandbox Code Playgroud)

表2:

表名:读者:

id (int)

blog_post_id (int)
name (string)
comment (string)
Run Code Online (Sandbox Code Playgroud)

在Readers表中,blog_post_id/name上有一个唯一的复合键(即每个帖子每个读者一个评论),但这对我的问题可能无关紧要.

我希望能够做一个查询告诉我每个BlogPost的特定读者评论是什么,但它应该包括没有为该读者输入评论的BlogPosts(因此查询应该为每个博客帖子返回一行)数据库).

我尝试了几个看起来像这样的变体:

SELECT  
     BlogPosts.id,
     BlogPosts.title,
     Readers.name,
     Readers.comment
    FROM
         BlogPosts
    RIGHT JOIN Readers ON
    (BlogPosts.id = Readers.blog_post_id)
    WHERE Readers.name = "joe"
Run Code Online (Sandbox Code Playgroud)

..这只返回实际上有来自乔的评论的行.每当我包含where子句时,我能够获得所有博客帖子的其他变体给了我一个无效的标识符.

我正在使用Oracle Express 10g以防万一.

谢谢你的帮助.

ber*_*nie 5

一切看起来都正确,除非您想将WHERE子句移动到连接中,如下所示:

    SELECT BlogPosts.id,
           BlogPosts.title,
           Readers.name,
           Readers.comment
      FROM BlogPosts
RIGHT JOIN Readers ON BlogPosts.id = Readers.blog_post_id
       AND Readers.name = 'joe'
Run Code Online (Sandbox Code Playgroud)

你有效地使OUTER JOIN成内一个当你把Readers.name = 'joe'对的WHERE条款.

编辑:
感谢OP在评论中的澄清.
您在最近的评论中描述的内容可以通过从右连接切换到左连接(如前面另一位评论者的建议)来实现.
请注意,每个帖子有多个评论时,每个BlogPost可以获得多行.