簡體   English   中英

需要幫助來構建PL / SQL查詢

[英]Need help to build a PL/SQL Query

我有需要建立sql查詢的方案。 我試圖提出一個有效的查詢,但是找不到一種清晰的方法。 我的情況如下:

我有TABLE_A和TABLE_B,其中FIELD_AB肯定是TABLE_A的文件,但是,TABLE_B中可以存在FIELD_AB。

我需要從TABLE_B檢索FIELD_AB的值(如果不存在),然后從TABLE_A檢索FIELD_AB的值。

我正在尋找一個查詢來檢索FIELD_AB的值,並且據我所知,可以使用CASE語句來完成此操作,但是並不清楚使用它的更好方法。

編輯:

請不要誤解問題。 我所說的“ FIELD_AB可以存在”的意思是,有可能FIELD_AB本身不存在於TABLE_B中,而不是FIELD_AB的值。

謝謝

您可能需要使用外部聯接來鏈接兩個表:

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()語句相同。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM