Нужна помощь в создании запроса PL / SQL - PullRequest
0 голосов
/ 31 мая 2010

У меня есть сценарий, к которому нужно построить SQL-запрос. Я пытался придумать эффективный запрос, но не смог найти четкого способа сделать это. Мой сценарий выглядит следующим образом:

У меня есть TABLE_A и TABLE_B, где FIELD_AB определенно будет полем TABLE_A, однако в TABLE_B может существовать FIELD_AB.

Мне нужно получить значение для FIELD_AB из TABLE_B, если такое поле существует, если его нет, то получить значение для FIELD_AB из TABLE_A.

Я ищу один запрос для получения значения FIELD_AB, и, насколько мне известно, оператор CASE может быть использован для достижения этой цели, но не совсем понятен лучший способ его использования.

EDIT:

Пожалуйста, не поймите неправильно вопрос. Под "FIELD_AB может существовать" я подразумеваю то, что существует вероятность того, что FIELD_AB сам по себе не существует в TABLE_B, а не является значением для FIELD_AB. Любая помощь приветствуется

Спасибо

Ответы [ 2 ]

1 голос
/ 31 мая 2010

Вероятно, вам нужно использовать внешнее соединение, чтобы связать две таблицы:

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 )
/

У Oracle есть несколько альтернативных способов тестирования на NULL. Более простой, если не стандартный, способ тестирования на AB был бы:

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

Это логически идентично более подробному выражению CASE ().

0 голосов
/ 31 мая 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...