2014-07-08 2 views
0

같은 열 이름의 다른 두 테이블 ('SalesOrder'및 'POI')에 테이블 ('Project')을 조인해야합니다 ('Project.PRJG_RecordID'). 그러나 'Project'테이블의 'ProjectID'열의 조건은 'POI'에서는 null이고 'SalesOrder'에서는 null이 아니어야합니다. 어떻게 구문을 작성합니까?SQL - 세 번째 테이블이 두 테이블에 조인되었지만 세 번째 테이블의 열 조건이 다른 경우

내가 왔어요 가장 가까운는 다음과 같습니다

(ORIGINAL POST 년부터 수정 됨) :

Select * 
From SalesOrder 
Inner Join Project On Project.PRJG_RecordID = 
SalesOrder.SOM_PRJG_DfltRecordID 
Left Join POI On ProjectGroup.PRJG_RecordID = 
POI.POI_PRJG_DfltRecordID 
Where Project.ProjectID is null -- as it relates to the POI table. 
And Project.ProjectID = '12345' -- as it relates to the SalesOrder table. 

참고 : Project.ProjectID이 NVARCHAR (25) 반면 Project.PRJG_RecordID는 고유 식별자입니다.

어떻게?

+1

'POI' 테이블? – dognose

+0

이전 쿼리가 잘못되었습니다. 수정했습니다. 다행스럽게도 위에 질문 한 내용을 더 쉽게 이해할 수 있기를 바랍니다. – user3769185

답변

0

결과가 어떻게 보이는지에 대한 질문은 명확하지 않지만 시도해보십시오. POI와 SalesOrders 둘 다 Project에 참여하기 때문에 Project를 가장 왼쪽으로 만들 필요가 있지만 다른 두 테이블 중 적어도 하나에 참여하지 않는 Project 행은 필터링해야합니다.

SELECT * 
FROM Project 
    LEFT OUTER JOIN SalesOrder On Project.PRJG_RecordID = SalesOrder.SOM_PRJG_DfltRecordID 
    LEFT OUTER JOIN POI On Project.PRJG_RecordID = POI.POI_PRJG_DfltRecordID 
WHERE (POI.POI_PRJG_DfltRecordID IS NOT NULL AND Project.ProjectID is null) 
    OR (SalesOrder.SOM_PRJG_DfltRecordID IS NOT NULL AND Project.ProjectID is NOT null) 
0

나는 오해 될 수 있지만, 그냥 WHERE 절

의 마지막에

AND SalesOrder.ProductID IS NOT NULL

를 추가해야 할 것 같아 그리고 당신은 또한 POI 테이블에 합류하지 않을 . ProjectGroup에 가입하면 아무데도 사용되지 않습니다. 이걸 할 의도 였을까요?

Select * 
From SalesOrder 
Inner Join Project On Project.PRJG_RecordID = 
SalesOrder.SOM_PRJG_DfltRecordID 
Left Join POI On POI.POI_PRJG_DfltRecordID = SalesOrder.SOM_PRJG_DfltRecordID 
Where Project.ProjectID is null 
AND SalesOrder.ProductID IS NOT NULL 
관련 문제