2013-06-12 128 views
1

这个问题让人讨厌,因为我还没有在sql中使用中间表的烦恼。但是,我在一时间赶时间,所以我选择反问。从第三张表中检索数据

我希望结合这些SQL代码,这样我就可以在同一个转发器中从“老师”以及“团队”和“级别”中检索数据。

我是从“老师”表通过FK_teacher从middletable“teacher_team”这是通过FK_team与我的球队表醒目的名称

难道任何机会有可能这些所谓联合,我可以通过一个中继器提取它?

// Team <-> level relation 

SELECT 
team.team_id as team_id, 
level.level as level, 
FROM team 
INNER JOIN level ON level.level_id = team.team_FK_level 
WHERE team.team_FK_type = @id 


// Team <-> Team_Teacher <-> Teacher relation 

SELECT teacher.teacher_name as name 
FROM teacher WHERE teacher.teacher_id 
IN (
SELECT teacher_team.FK_teacher 
FROM teacher_team 
INNER JOIN team ON team.team_id = teacher_team.FK_team 
WHERE team.team_FK_type = @id 
) 

*编辑* 得到这个代码的基础上拉维·辛格的答案工作。我遇到了另一个问题。 如果在teacher_teams中有两位教师与其相关(如果有),我的转发器会输出两次队伍。有没有什么办法可以合并这些,而不需要在中继器内部建立中继器?

SELECT 
team.team_id as team_id, 
level.level as level, 
teacher_team.FK_teacher, 
teacher.teacher_name as teacher 
FROM team 
INNER JOIN level ON level.level_id = team.team_FK_level 
LEFT JOIN teacher_team on teacher_team.FK_hold = team.team_id 
LEFT JOIN teacheron teacher.teacher_id = teacher_team.FK_teacher 
WHERE team.team_FK_type = @id 

回答

1

试试这个:

SELECT 
teacher.teacher_name as name 
,team.team_id as team_id 
,level.level as level 
FROM teacher 
inner join teacher_team on teacher.teacher_id =teacher_team.FK_teacher 
INNER JOIN team ON team.team_id = teacher_team.FK_team 
INNER JOIN level ON level.level_id = team.team_FK_level 
WHERE team.team_FK_type = @id 

更新: 这应该与您更新的问题有所帮助:

with demo_cte as(
SELECT 
teacher.teacher_name as name 
,team.team_id as team_id 
,level.level as level 
FROM teacher 
inner join teacher_team on teacher.teacher_id =teacher_team.FK_teacher 
INNER JOIN team ON team.team_id = teacher_team.FK_team 
INNER JOIN level ON level.level_id = team.team_FK_level 
WHERE team.team_FK_type = @id 
) 


select distinct t1.team_id, 
    t1.level, 
    STUFF(
     (SELECT ', ' + t2.name 
      FROM demo_cte t2 
      where t1.team_id = t2.team_id 
      and t1.level = t2.level 

      FOR XML PATH ('')) 
      , 1, 1, '') AS name 
from demo_cte t1; 
+0

这不是加盟的水平。 我的团队<-> Team_Teacher <->老师关系做同样的事情 – GentlemenFinn

+0

@GentlemenFinn:这有帮助吗? –

+0

我转过身来,因为团队是我的主桌。 但它的工作是=)我不知道我可以抓住每一张我想通过内部加入中间表的表。 – GentlemenFinn

相关问题