我正在编写一个显示来自issues
表的数据的查询。我们有另一个名为labels
的表和一个名为issues_labels
的连接表。我们通常会为问题分配“高优先级”,“中优先级”或“低优先级”标签。
我不确定如何编写查询以便返回此结果:
Id | Title | Priority
2 everything is broken Low-Priority
4 internets is down High-Priority
我一直在写查询,但这个简单(或不简单)让我疯狂。我是否需要编写3个子查询来提取链接到每个标签的问题:
with hp_issues as (
SELECT *
FROM issues
INNER JOIN issues_labels on issues_labels.issue_id = issue.id
WHERE issues_labels.label_id = 10 --id for high priority issue
)
....
任何帮助表示感谢。
答案 0 :(得分:2)
假设issues_labels是一个在多对多情况下连接问题和标签的表,您可以这样做:
select
i.id,
i.title,
l.priority
from issues i
left join issues_labels il on il.issues_id = i.id
left join labels l on l.id = il.labels_id
示例:http://sqlfiddle.com/#!15/b78ee/1
出于任何原因,如果您的某个问题具有多个优先级,并且您希望将其发布为
5 | Some title | High Priority, Low Priority
你可以这样做:
select
i.id,
i.title,
string_agg(l.priority, ',')
from issues i
left join issues_labels il on il.issues_id = i.id
left join labels l on l.id = il.labels_id
group by
i.id,
i.title
这类似于MySQL的group_concat()
答案 1 :(得分:0)
问题只能有一个标签吗?如果是这样,我认为不需要多对多。
但是,您应该可以执行以下操作:
SELECT i.issueID, i.title, l.priority
FROM issue AS i
LEFT JOIN issue_label as il on i.issueID = il.issueID
LEFT JOIN label as l on l.labelID = il.labelID
WHERE issue_label = 10;