【发布时间】:2012-01-24 19:50:07
【问题描述】:
我正在尝试提取存在于几个不同表中的数据。具体来说,我有一个错误表,还有一个关于这些错误的“帖子”(cmets/updates)表。对于每个错误,可能没有 cmets、一个注释或多个。我希望返回所有错误,并返回所有 cmets(虽然我想省略更新),但作为列,而不是每个错误/评论一行。
这是我开始的地方:
select
b.bg_id,
b.bg_reported_date as "Date Created",
b.bg_short_desc as "Summary",
bp.bp_comment_search as "Comment Body",
s.st_name as "Status",
p.pr_name as "Priority",
bp.bp_type as "Update Type"
from
bugs b
inner join bug_posts bp on b.bg_id = bp.bp_bug
inner join statuses s on b.bg_status = s.st_id
inner join priorities p on b.bg_priority = p.pr_id
--where bp.bp_type = 'comment'
order by b.bg_id asc
这给了我每条评论一行,这不是我想要的。如您所见,我还尝试将结果限制为仅包含“评论”类型的帖子,但这排除了任何没有 cmets 的错误,因此我将其删除。
我发现这篇文章似乎相关:JOIN in SQL with one-to-many relationship
但我无法让它与我的查询一起使用。这是我目前所拥有的:
select
b.bg_id,
b.bg_reported_date as "Date Created",
b.bg_short_desc as "Summary",
--bp.bp_comment_search as "Comment Body",
s.st_name as "Status",
p.pr_name as "Priority",
--bp.bp_type as "Update Type"
from
bugs b
left outer join
(select bp_comment_search as "Comment Body"
from bug_posts
group by bp_bug) bp on bp.bp_bug = b.bg_id
--inner join bug_posts bp on b.bg_id = bp.bp_bug
inner join statuses s on b.bg_status = s.st_id
inner join priorities p on b.bg_priority = p.pr_id
--where bp.bp_type = 'comment'
order by b.bg_id asc
我的 SQL 知识非常有限,但任何人都可以提供任何帮助将不胜感激。谢谢!
【问题讨论】:
-
您使用的是哪种 SQL(MySQL、Postgres、Oracle、MSSql)以及它的哪个版本?
-
我在下面的答案中添加了一个示例。将 cmets 放入列(而不是行)的部分 -> 为什么要这样做?你能举一个期望输出的例子吗?
标签: sql sql-server-2008 one-to-many