2013-06-12 2 views
1

이 질문은 SQL에서 중간 테이블을 사용하지 않고 있으므로 질문 할 때 짜증이납니다. 그러나 나는 어쨌든 물어보기로 선택했습니다.세 번째 테이블에서 데이터 가져 오기

같은 리피터에서 "교사"와 "팀"및 "레벨"의 데이터를 검색 할 수 있도록이 sql 코드를 결합하고 싶습니다.

내가 FK_team을 통해 우리 팀의 테이블에 관련되어 middletable "teacher_team"에서 FK_teacher을 통해 "교사"테이블에서 이름을 잡는거야

혹시이 때문에 결합 할 수 있을까 난 하나의 중계기를 통해 모든 것을 추출 할 수 있습니까?

// 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 * 는 라비 싱의 답변에 따라 작업이 코드를 얻었다. 다른 문제가 발생했습니다. 내 repeater는 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

관련 문제