2014-04-28 2 views
1

8 개의 테이블을 함께 결합하는 기존 SQL 요청이 있습니다. 3 개의 모어 테이블을 추가하여 내 데이터에 성적인 정보를 추가해야합니다.여러 테이블에서 SQL 조건부 조인을 수행하는 방법은 무엇입니까?

db schema

빨간색 상자의 부분은 내가 추가 할 수있어 하나입니다

이 작업을 위해, 우리는 (other_tables에 번들) 6 개 테이블을 무시할 수 있습니다. 나는 약간 조건을 존중하는 request를 추가하고 싶다. 아무도 발견되지 않으면 나는 여전히 사람을 원하지만 Request 칸에 아무런 데이터도 없다.

지금까지이 문제를 시도했지만 복수형 left join은보기 흉한 것으로 보입니다.

Select [...], request.Id 
From [Action] inner join [other tables on ...] inner join 
    Person on Action.PersonId = Person.Id left JOIN 
request as r on r.PersonId = Person.Id left JOIN 
Subject as s on s.SubjectId = r.SubjectId left JOIN 
TypeRequest tr on tr.IDSujet = s.SubjectId 
Where 
([already existing conditions]) and typeRequest = 'MOVE' (?) 

그리고 한 번 더 내가 원하는 바꿔하기 : 또한, (다른 테이블에) 몇 가지 필터에 따라 나에게 모든 actions를 얻기가 링크 된 person를 얻을. personRequest의 특정 TypeRequest이있는 경우 Request id을 데이터 행에 추가하십시오.

답변

1

위의 쿼리가 작동합니까? "보기 흉하고 너무 포괄적 인 것 같습니다."약간 모호합니다. 원하는 결과를 얻고 있습니까? 당신은 또한이 같은 참여에 where 절의 일부를 이동할 수 있습니다

Select [...], request.Id 
From [Action] inner join [other tables on ...] inner join 
    Person on Action.PersonId = Person.Id left JOIN 
request as r on r.PersonId = Person.Id left JOIN 
Subject as s on s.SubjectId = r.SubjectId left JOIN 
TypeRequest tr on tr.IDSujet = s.SubjectId **and typeRequest = 'MOVE'** 
Where 
([already existing conditions]) 
+0

내가 "너무 포괄적"쓴 때문에와 쿼리 추가'(변경되지해야하지만) 더 결과를 반환 join' 떠났다. 그리고 3'' 왼쪽 join'은'request'에'left join','subject'에'inner join','typeRequest'에 있어야하기 때문에 추한 느낌이 듭니다. – Kraz

+0

공통적으로 1 개의 필드가있는 세 개의 테이블이있는 경우 선택 및 2 개의 조인을 사용하여 세 개의 테이블 모두에서 결과를 얻을 수 있습니다. 어쩌면 당신의 테이블이 지나치게 표준화되어있을 수도 있습니다. – b3ko

+0

답변에 제안한 내용을 사용했는데 제대로 작동하는 것 같습니다. 감사. (나는 DB 구조도 바꿀 수 없다). – Kraz

관련 문제