我正在尝试构建输出:
Name source source source
Tim Other TV Radio
我想要将Person表和Source表结合起来:
Person
ID Name
1 Tim
Source
ID Name
1 Other
2 TV
3 Radio
Person_Source
p_id s_id
1 1
1 2
我有一个查询,它构建了每个时间源和多行输出。我正在寻找结果集中的单个结果
select source.name
from person left join person_source
on person_source.person_source_id = person.id join source
on source.id = person_source.source_id
答案 0 :(得分:3)
您可以在查询中添加DISTINCT:
select DISTINCT source.name
from person left join person_source
on person_source.person_source_id = person.id join source
on source.id = person_source.source_id
答案 1 :(得分:2)
不确定这应该是什么样的SQL,但您可以尝试以下方法:
SELECT
p.Name,
MAX(CASE s.ID WHEN 1 THEN s.Name END) AS source1,
MAX(CASE s.ID WHEN 2 THEN s.Name END) AS source2,
MAX(CASE s.ID WHEN 3 THEN s.Name END) AS source3
FROM Person p
INNER JOIN Person_Source ps ON p.ID = ps.p_id
INNER JOIN Source s ON ps.s_id = s.ID
GROUP BY
p.ID,
p.Name
您还可以使用他们的名字以不同的方式检查来源,如下所示:
…
MAX(CASE s.Name WHEN 'TV' THEN s.Name END) AS source1,
MAX(CASE s.Name WHEN 'Radio' THEN s.Name END) AS source2,
MAX(CASE s.Name WHEN 'Other' THEN s.Name END) AS source3
…
请注意,SQL查询始终返回固定数量的列。您需要事先确定查询应返回多少源,如果该数字应取决于Source
表中可能的源的实际数量,则必须动态构建查询,包括所有必要的来源但不超过必要的。