1

SQLで中間テーブルを使用するコツがまだないので、この質問はイライラします。しかし、私は急いでいるので、とにかく尋ねることにしました。

これらの SQL コードを組み合わせて、同じリピーターで「教師」と「チーム」および「レベル」からデータを取得できるようにしたいと考えています。

FK_team を介してチーム テーブルに関連付けられているミドルテーブル「teacher_team」から FK_teacher を介して「教師」テーブルから名前をキャッチしています。

これらを組み合わせて、1つのリピーターですべてを抽出できるようにすることは可能でしょうか?

// 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
) 

*編集* Ravi Singhの回答に基づいて、このコードが機能するようになりました。別の問題が発生しました。teacher_teams に関連する2人の教師がいる場合、私のリピーターはチーム行を2回出力します(もちろん)。リピーター内にリピーターを作成せずにこれらをマージする方法はありますか?

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
4

1 に答える 1

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;
于 2013-06-12T12:07:34.470 に答える