2014-11-20 4 views
0

을 나는 테이블에 다음과 같은 한 :내부 조인 - SQL

우편 번호가 판매 테이블에 null이 아닌 경우에만 나는 우편 번호에 고객 테이블과 판매 테이블에 가입 할
Sales: 
SalesID CustomerID ZipCode 
101  111   11331 
102  222   NULL 
103  333   11551 
104  444   NULL 


Customer: 
CustomerID Zipcode Customerphone 
111   11331 4444444 
222   11441 5555555 
333   11551 7777777 
444   11661 8888888 

Contact: 
CustomerID CustomerName CustomerEmail 
111   John   [email protected] 
222   Chris   [email protected] 
333   Mike   [email protected] 
444   Brian   [email protected] 

. zipcode가 null 인 경우 Customer 테이블의 CustomerID를 Customer 테이블의 CustomerID와 함께 Sale 테이블에 매핑합니다. 그런 다음 Customer 테이블에서 CustomerID를 grap하고 Contact 테이블과 조인 한 다음 CustomerName과 CustomerEmail을 얻습니다.

미리 감사드립니다.

+1

지금까지 어떤 시도를 했습니까? – WeSt

답변

0

이와 비슷한?

SELECT S.SalesID, CNT.CustomerName, CNT.CustomerEmail 
FROM Sales S 
LEFT JOIN Customer C1 ON C1.Zipcode = S.ZipCode 
LEFT JOIN Customer C2 ON C2.CustomerID = S.CustomerID 
LEFT JOIN Contact CNT ON CNT.CustomerID = ISNULL(C1.CustomerID, C2.CustomerID) 

당신이 고객을 얻을 것이다 확실히, 당신은 Contact와 함께 INNER JOIN을 사용할 수 있습니다 알고 있다면.

CustomerID은 한 사용자를 가리키고 ZipCode은 다른 사용자를 가리킬 수 있습니까? 불가능할 경우 (중복 조인의 위험이 없음) 다음을 시도 할 수 있습니다.

SELECT S.SalesID, CNT.CustomerName, CNT.CustomerEmail 
FROM Sales S 
INNER JOIN Customer C ON C.Zipcode = S.ZipCode OR C.CustomerID = S.CustomerID 
INNER JOIN Contact CNT ON CNT.CustomerID = C.CustomerID 
+0

답장을 보내 주신 Andrew에게 감사드립니다. 답변으로 답장을 표시하고 싶지만 그렇게하지 못하게하고 있습니다. 나는 뭔가 잘못하고있을 수 있습니다. 위쪽 화살표를 클릭하고 있지만 업데이트되지 않습니다. 그 방법을 제안 해주세요. –

+0

그건 upvoting을위한거야, 당신은 아래의 틱을 클릭해야합니다. 자세한 정보는 다음을 참조하십시오. http://meta.stackexchange.com/a/5235 어떤 옵션이 가장 잘 작동 했습니까? – Andrew

+0

@johnmichael, 운이 없다? – Andrew

0

다음과 같이 시도해보십시오.

SELECT * 
FROM Customer C 
     JOIN Sales s 
     ON c.zipcode = s.zipcode 
      OR (s.zipcode IS NULL 
        AND c.CustomerID = s.CustomerID) 
     JOIN contact cc 
     ON c.CustomerID = cc.CustomerID