2016-07-31 4 views
0

다음과 같이 SQL Server 테이블을 가지고 있으며 아래와 같이 결과를 생성하려면 조인을 수행해야합니다.SQL Server : 교차 테이블을 조인하는 방법

Custorder :

itemcode orderqty 
------------------- 
item001  10 
item003  30 
item004  50 

제조 : 나는이 두 테이블을 조인 어떻게

itemcode manuqty 
-------------------- 
item001  100 
item002  200 
item004  300 

itemcode orderqty manuqty 
--------------------------------- 
item001  10   100 
item002  NULL  200 
item003  30   NULL 
item004  50   300 

어떤 도움을 주셔서 감사 생성한다.

답변

1

먼저 "교차 결합"구는 DB 커뮤니티에서 "직교 제품"을 생성하는 조인을 나타 내기 위해 사용됩니다. 예를 들어, 알파벳 크로스 가입 자체가 AA를 생산하는 것, AB, AC, AD는 ... AZ는 BA는 등 BB, BC는

당신이 원하는 것은 단지 일반 조인 :

Select coalesce(co.itemcode, m.itemcode) itemCode, 
    co.orderqty, m.manuqty 
From custorder co 
    full join manufactured m 
     on m.itemcode = co.itemcode 
+0

'내가 테스트 – JamieD77

+0

@Charless Bretana을 manufactured' item002'에서'포함되지 않습니다 가입 일반 코드는 item001 10 100과 item004 50 300을주고, 나머지 두 항목은 누락되었습니다 – Jackie

+0

외부 결합을 원합니다.이 경우에는 'ful l' [outer]'join'. 나는 내 대답을 수정했다. –

4

이 경우 완전 외부 조인을 사용할 수 있습니다.

SELECT ISNULL(co.itemcode, ma.itemcode) itemcode , 
     orderqty , 
     manuqty 
FROM custorder co 
     FULL OUTER JOIN manufactured ma ON co.itemcode = ma.itemcode 

당신이 가지고있는 또 다른 옵션을 사용하면 기록이 많은 경우 결과 ..이 매우 느린 쿼리가 발생할 수 있습니다를 얻기 위해 두 테이블에서 itemcode 목록을 구축하고 여기에 가입 쿼리를 사용하는 것입니다. . 이상적으로 ... 당신은 inventory (itemid int, itemcode varchar) 유사한 테이블을 것이다 당신은 다른 사람에게 외부 조인에 해당 테이블을 사용

;WITH items AS (
    --get distinct itemcodes from both tables 
    SELECT itemcode FROM custorder 
    UNION 
    SELECT itemcode FROM manufactured 
) 
SELECT i.itemcode, 
     co.orderqty, 
     ma.manuqty 
FROM custorder co 
     RIGHT OUTER JOIN items i ON i.itemcode = co.itemcode 
     LEFT OUTER JOIN manufactured ma ON i.itemcode = ma.itemcode 
관련 문제