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以防万一.
谢谢你的帮助.
一切看起来都正确,除非您想将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可以获得多行.
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |