如果 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()
我正在编写一个查询来显示来自 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()