SQL连接两个表,其中一个链接表介于 - GORM / Grails之间

时间:2012-03-09 03:21:50

标签: sql grails join

我正在尝试构建输出:

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

2 个答案:

答案 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表中可能的源的实际数量,则必须动态构建查询,包括所有必要的来源但不超过必要的。