2011-12-15 5 views
2

첫 번째 테이블의 결과가 필요한 세 테이블의 결과가 필요합니다. 이를 위해 왼쪽 외부 조인을 사용하여 sno (기본 키) 단위로 테이블을 연결합니다. 쿼리는 정상적으로 실행되지만 다른 조건에서 세 번째 테이블의 결과를 선택하려면 추가 된 복잡성이 있습니다.왼쪽 바깥 쪽 조인 쿼리에서 여러 기준으로 작동하는 쿼리

나는 결과를 검색하는 것을 시도하고 어떻게 볼 때 문제는 지워집니다

:

SELECT * FROM tw_main MainTable 
    LEFT OUTER JOIN tw_details TW 
     ON TW.sno = MainTable.sno 
    LEFT OUTER JOIN tw_typedetails CWR 
     ON CWR.sno = MainTable.sno WHERE CWR.twcatname = 'CWR' 
    LEFT OUTER JOIN tw_typedetails OHT 
     ON OHT.sno = MainTable.sno WHERE OHT.twcatname = 'OHT' 
    LEFT OUTER JOIN tw_typedetails DS 
     ON DS.sno = MainTable.sno WHERE DS.twcatname = 'DS'    
    WHERE 
     MainTable.sno = 420; 

내가 한 번만 세 번째 테이블 (tw_typedetails)를 사용하는 경우이 쿼리가 잘 작동을하지만, 내가 같은 테이블에서 별도의 결과 집합을 원한다 그러나 다른 WHERE 절이 있습니다.

어떤 수정이 필요합니까? SQL Server 2008 R2 Express를 사용하고 있습니다. 이 쿼리는 Crystal Reports 명령에서 실행해야합니다. where 절에 null 값을

LEFT OUTER JOIN tw_details TW 
     ON TW.sno = MainTable.sno 
      AND MainTable.sno = 420 

을하거나 허용 :

답변

6

당신은 where 조항의 몇 너무 많은있다.

대신 and을 사용해보세요.

SELECT * FROM tw_main MainTable 
    LEFT OUTER JOIN tw_details TW 
     ON TW.sno = MainTable.sno 
    LEFT OUTER JOIN tw_typedetails CWR 
     ON CWR.sno = MainTable.sno AND CWR.twcatname = 'CWR' 
    LEFT OUTER JOIN tw_typedetails OHT 
     ON OHT.sno = MainTable.sno AND OHT.twcatname = 'OHT' 
    LEFT OUTER JOIN tw_typedetails DS 
     ON DS.sno = MainTable.sno AND DS.twcatname = 'DS'    
    WHERE 
     MainTable.sno = 420; 
+0

SQL Server 내에서 독립적으로 실행하면 쿼리가 제대로 실행되지만 Crystal Reports 내에서 실행하면 CWR 결과가 DS 결과와 겹칩니다. OHT 결과가 올바르게 표시됩니다. – RKh

3
on 절에 where 절을 이동

WHERE MainTable.sno is null or MainTable.sno = 420; 
+0

끝에 사용하면 WHERE 절이 정확하지 않습니까? – RKh

+0

첫 번째 방법을 시도했지만 전체 테이블을 반환합니다. – RKh

관련 문제