如果 join table 中存在条目,如何显示字段?

How to display field if entry exists in join table?

我正在编写一个查询来显示来自 issues table 的数据。我们有另一个名为 labels 的 table 和一个名为 issues_labels 的联接 table。我们通常为问题分配 'High-Priority'、'Medium-Priority' 或“低优先级”标签。

我不确定如何编写我的查询才能return这个结果:

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
)
....

感谢任何帮助。

一个问题可以只有一个标签吗?如果是这样,我认为不需要多对多。

但是,您应该可以执行以下操作:

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;

假设 issues_labels 是一个 table 在多对多的情况下连接问题和标签,你可以这样做:

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()

示例如下:http://sqlfiddle.com/#!15/3dce4/2