2013-06-12 5 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 
) 

* EDIT * получил этот код, чтобы работать на основе ответа Рави Сингх. Я столкнулся с другой проблемой. Мой повторитель выведет строку команд дважды, если к нему будут учиться два учителя (конечно). Могу ли я объединить их, не создавая репитера внутри ретранслятора?

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 

Update: Это должно помочь с обновленной вопрос:

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

Это не присоединяющиеся уровень. my Team <-> Team_Teacher <-> Отношение учителя делает то же самое – GentlemenFinn

+0

@ GentlemenFinn: Это помогает? –

+0

Я обернулся, так как команда - мой главный стол. Но это сработало да =) Я не знал, что я мог бы захватить каждую таблицу, которую я хотел, только внутренне соединив средний стол. – GentlemenFinn

Смежные вопросы