2012-11-12 3 views
-1

그래서, 기존 검색 결과를 통해 시도했지만 난처한 느낌. 희망을 갖고 누군가가 도울 수 있기를 바랍니다.조건부 내부 조인 null을 기반으로

A (3 열), B (2 열), C (2 열)의 세 개의 테이블이 있으며 A1의 열을 기준으로 C1 열의 값을 가져와야합니다.

따라서 A1의 값이 NULL이면 'NONE'을 (를) 단순히 C2의 행과 조인하고 C1의 값을 가져옵니다.

그러나 A1의 값이 NOT NULL이면 값이 B2의 행과 일치하고 B1의 값이 C2와 일치하여 C1 값이 부여됩니다.

어떻게 달성 할 것인가? 내외부 조인이 있다는 것을 이해하지만 그것은 제대로되지 않을 것입니다.

다음은 데이터의 예입니다.

Table - A 

+--------+----+----+ 
| A1  | A2 | A3 | 
+--------+----+----+ 
| Cake | 22 | X | 
| (null) | 20 | Y | 
| Butter | 30 | Z | 
+--------+----+----+ 

Table - B 

+-----+--------+ 
| B1 | B2  | 
+-----+--------+ 
| EAT | Cake | 
| USE | Oil | 
| PRO | Butter | 
+-----+--------+ 

Table - C 

+-----+--------+ 
| C1 | C2  | 
+-----+--------+ 
| 100 | EAT | 
| 200 | USE | 
| 999 | NONE | 
| 300 | PRO | 
+-----+--------+ 

모든 도움을 주시면 대단히 감사하겠습니다.

+5

Welcome to StackOverflow. 우리가 당신을 도울 수 있도록 도와주세요. 지금까지 뭐 해봤 어? 어떤 데이터베이스를 사용하고 있습니까? –

+0

오라클을 사용하여, 열이 Null 인 경우 'N/A와 다른 경우가 NULL이 아니고 column_name end = B2이지만 대/소문자를 시도했지만 올바르게 결과를 반환하지 않습니다. – user1819085

답변

2

쿼리

SELECT * FROM 
( SELECT a1,c1 FROM a,b,c 
      WHERE a.a1=b.b2 AND b.b1=c.c2 
    UNION 
    SELECT b2,c1 FROM b JOIN c on b1=c2 
) X 
UNION 
SELECT a1,c1 FROM a,c WHERE a1 IS NULL AND c2='NONE'; 

C1 값 뒤죽박죽 수 있기 때문에 I은 A1과 C1 모두를 획득하고 이것이 구별. 주어진 순서로 c1 값을 원하면 쿼리가 다소 어려울지라도 알려주십시오.

+0

그래서 최종 답은 c1 - 100, 999, 300의 값이 될 것입니다. – user1819085

+0

답변은 작동하지만 노조를 사용하지 않으려 고합니다. 그래서, 나는 그것을 유지하고 저를 위해 작동하는 해결책을 찾아 냈습니다. x.A1이 널 (null) 일 때 '없음'(B에서 B1을 B2 = A1으로 선택) end = C.C2 (A에서 A1 선택) x 내부 결합 C에서 선택 c1 – user1819085

0

나를 위해 잘 작동하는 해결책과 Nicole의 대답도 정확합니다.

select c1 from (select A1 from A)x 
inner join C on case when x.A1 is null then 'NONE' 
       else (Select B1 from B where B2 = A1) 
       end = C.C2