2013-03-22 2 views
3

테이블에 null 값이 있습니다. ORDER 테이블에서 PART_ID 섹션에는 2 개의 null이 있고 CUSTOMER_ID에는 2 개의 null 값이 있습니다.LEFT OUTER JOIN EQUIVALENT

SELECT O.ORDER_ID , O.ORDER_DATE , O.CUST_ID, O.QUANTITY ,O.PART_ID , 
     C.CUST_NAME, C.CUST_CODE, P.PART_NAME, P.PART_CODE 
FROM [ORDER] O 
    LEFT OUTER JOIN PART P ON P.PART_ID = O.PART_ID 
    LEFT OUTER JOIN CUSTOMER C ON C.CUST_ID = O.CUST_ID 

그래서 여기 내 질문은 :

와 나는 쿼리의 종류가있다. 외부 조인을 사용하지 않고 어떻게 할 수 있습니까? 나는 존재하지 않는 것을 포함하여 너무 많은 것을 시도했다;

SELECT * 
FROM [ORDER] O ,CUSTOMER C, PART P 
WHERE C.CUST_ID = (
    SELECT CUST_ID FROM CUSTOMER C WHERE O.CUST_ID = C.CUST_ID 
) AND P.PART_ID = (SELECT PART_ID FROM PART P WHERE O.PART_ID = P.PART_ID) 

그러나 해결책을 찾을 수 없습니다. 어떻게 될지 해결책이 있다면?

(참고 :.이 숙제입니다)

나는 테이블의 종류가 있습니다

enter image description here

왼쪽 외부 조인을 준다 :

enter image description here

년 HW 그것은 외부 조인을 사용하지 않고 왼쪽 외부 조인과 동일한 테이블을 얻는다 고 말했다. 하지만 내가 말한 것처럼. 나는 또한 MSSQL을 사용하고있다.

+4

왜 하시겠습니까? – Yuck

+0

왜 구문이 사용되지 않으며 정적 분석 도구로 인해 권장되지 않는지 궁금한 점 (http://msdn.microsoft.com/en-us/library/dd172122%28v=vs.100%29.aspx) –

+1

또한 LEFT OUTER JOIN의 OUTER도 함축되어 있습니다. 대신에 LEFT JOIN을 쓸 수 있습니다. – Yuck

답변

3

외부 조인은 내부 조인을 통한 수퍼 세트를 생성합니다. 실제로 Wikipedia에서 : 왼쪽 외부 조인은 내부 조인의 모든 값과 왼쪽 테이블의 오른쪽 테이블과 일치하지 않는 모든 값을 반환합니다.

그래서 하나가 가 조인 조건을 같은과 같은 테이블 사이을 선택 조인 내부의 UNION를 사용할 수있는 또 다른 가에서 일치하지 않고 모든 행을 반환 첫번째 테이블에서을 선택 내부 조인 사용 조인 왼쪽 외부를 모델링하기 (선생님이 결과를 준 후)

SELECT O.ORDER_ID , O.ORDER_DATE , O.CUST_ID, O.QUANTITY ,O.PART_ID , 
     P.PART_NAME, P.PART_CODE 
FROM [ORDER] O JOIN PART P ON P.PART_ID = O.PART_ID 
UNION 
SELECT O.ORDER_ID , O.ORDER_DATE , O.CUST_ID, O.QUANTITY ,O.PART_ID , 
     NULL, NULL 
FROM [ORDER] O 
WHERE NOT EXISTS (SELECT 'found' FROM PART P WHERE P.PART_ID = O.PART_ID) 
+0

+1 숙제 인 것을 감안할 때 이것이 올바른 접근 방법입니다. –

+0

@topchef 그렇습니다. 그렇지만 CUST_NAME과 CUST_CODE에게 어떻게 추가 할 수 있습니까? – developerCoder

+3

그 다음 당신의 숙제의 나머지가 될 것입니다 : 그냥 같은 접근 - 행운을 빕니다! – topchef

1

아마도 NULL 값이있는 열과 일치하는 열을 얻지 못하게하려고합니다. 그렇다면, 바로이 조인 조건을 수정

FROM [ORDER] O 
    LEFT OUTER JOIN PART P 
    ON P.PART_ID = O.PART_ID or (p.Part_id is NULL and o.Part_id is null) 
    LEFT OUTER JOIN CUSTOMER C 
    ON C.CUST_ID = O.CUST_ID or (c.cust_id is null and o.cust_id is null) 

이 방법의 주요 문제가 많은 (? 대부분의) SQL 엔진이 조인 인덱스를 사용하지 않을 것입니다.

0

외부 결합을 사용하지 않는 특별한 이유가 있습니까? 원하는 결과가 아니십니까? :

FROM [ORDER] O 
LEFT JOIN PART P 
ON P.PART_ID = O.PART_ID and P.PARTID is not null 
LEFT JOIN CUSTOMER C 
ON C.CUST_ID = O.CUST_ID and C.CUSTID is not null 
0

그래서 완전한 답변은 다음과 같이해야한다 :

우측 표 (I은 단일 왼쪽 가입에 사건을 감소)