2010-05-31 4 views
0

SQL 쿼리를 작성해야하는 시나리오가 있습니다. 효율적인 질의를 시도했지만이 일을하는 명확한 방법을 찾을 수 없었습니다. 내 시나리오는 다음과 같습니다 :PL/SQL 쿼리를 작성하는 데 도움이 필요합니다.

나는 TABLE_A와 TABLE_B를 가지고 있습니다. FIELD_AB은 TABLE_A의 파일 일 것이지만, TABLE_B에는 FIELD_AB이 존재할 수 있습니다. 같은 필드가 존재하는 경우

나는 그렇지 않은 경우, 다음 TABLE_A에서 FIELD_AB에 대한 값을 검색, TABLE_B에서, FIELD_AB에 대한 값을 검색 할 필요가있다.

내가 FIELD_AB의 값을 검색 할 수있는 단일 쿼리를 찾고 있어요, 내 지식 CASE 문에 따라 그것을 사용하는 더 나은 방법을 취소이를 있지만 사용할 수 있습니다.

편집 :

오해 질문을하지하시기 바랍니다. 나는 "FIELD_AB이 존재 할 수있다"가 무엇을 의미 자체가 TABLE_B에 존재하지 않는 FIELD_AB의 가능성이 있다는 것입니다 아닌 값은 FIELD_AB 을 위해 어떤 도움을

당신은 아마 사용할 필요가 당신에게

+0

편집 - 왜 이것을 [plsql] 태그로 표시했는지 분명하지 않습니다. 순수 SQL로 수행 할 수 있습니다. – APC

답변

1

감사 감사 외부는 두 테이블을 연결하는 조인

select a.id 
     , case when b.col_ab is null then a.col_ab 
       else b.col_ab end as ab 
from table_b b 
    left outer join table_a a 
    on (b.id = a.id) 
/

오라클은 NULL에 대한 테스트의 몇 가지 다른 방법이 있습니다. 더 간단한 표준이 아닌 경우, AB에 대한 시험 방법은 다음과 같습니다 이것은 더 자세한 CASE() 문을 논리적으로 동일

nvl2(b.col_ab, b.col_ab, a.col_ab) as ab 

.

+0

필드 자체가 존재하지 않는지 확인하기 위해 NULL 검사를 사용할 수 있습니까? (필드의 값이 아닌)이'b.id 독립적 table_b.field_ab 여부 table_b에서 행을 찾았는지 여부를 테스트 할 .... 널 – nimo

+0

'케이스 (col_ab는 어떤 ...) null인지 아니. 그래서 – araqnid

0
create table table_b (field_ab int not null, value varchar(20) not null) 

create table table_a (field_ab int not null, value varchar(20) not null) 

insert into table_a values(1, '1 from a') 
insert into table_a values(2, '2 from a') 
insert into table_a values(3, '3 from a') 

insert into table_b values(2, '2 from b') 

-- result is '2 from b' 
select 
    case when b.field_ab is null then a.value 
    else b.value 
    end 
from table_a a left outer join table_b b on a.field_ab = b.field_ab 
where a.field_ab = 2 

-- result is '1 from a' 
select 
    case when b.field_ab is null then a.value 
    else b.value 
    end 
from table_a a left outer join table_b b on a.field_ab = b.field_ab 
where a.field_ab = 1 
관련 문제