SQL使用-GORM/Grails之间的链接表连接两个表
我正在尝试建立这样的输出:SQL使用-GORM/Grails之间的链接表连接两个表,sql,grails,join,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 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
您可以向查询中添加一个独特的:
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
您可以向查询中添加一个独特的:
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
不确定这应该是什么味道的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查询始终返回固定数量的列。您需要事先决定查询应返回多少个源,如果数量取决于源表中可能的源的实际数量,则必须动态构建查询,包括所有必需的源,但不超过必需的源。不确定这应该是什么味道的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查询始终返回固定数量的列。您需要事先决定查询应返回多少个源,如果数量取决于源表中可能的源的实际数量,则必须动态构建查询,以包括所有必需的源,但不超过必需的源。为什么您所需的输出显示为Radio?在您的示例数据中,PERSON\u SOURCE似乎没有相应的记录。为什么您希望的输出显示Radio?似乎PERSON_SOURCE在您的示例数据中没有相应的记录。这使我能够使用结果集并处理数据。谢谢这使我能够使用结果集和处理数据。谢谢