2012-02-20 65 views
4

我有3個表 - TableATableBTableDetailSQL檢查值存在與否

**Table Detail** 
id FinalValue 
1  99 
2  88 
3  77 


**Table A** 
id InitValue Num 
1  10   100 
2  30   200 


**Table B** 
id InitValue Num 
3 20   200 

我的要求是得到TableDetailFinalValue基於

Num 

Num值會由用戶從文本框用戶界面中選擇)。如果TableB有一個記錄Num的部分,然後使用表B的id。如果沒有,然後使用表A的ID。 假設是表A具有所有Num值的記錄。

例如,

If Num=200: 

由於創紀錄的TableB中存在Num=200,使用表B的相應id (3)和TableDetail得到最終值其中id = 3,即

FinalValue = 77 

If Num =100: 

SinceTableB沒有任何記錄Num=100,使用TableA對應的id (1)並從TableDetail獲得FinalValue,其中id = 1,即

FinalValue = 99 

你可以幫我構架一個PL/SQL查詢相同的。謝謝!

+0

可這在普通的SQL來解決? – 2012-02-20 12:21:54

+0

@Mosty - 是的,我寧願它是普通的SQL。 – user656523 2012-02-20 17:10:38

回答

3

嘗試以下方法,@num由用戶通過

select FinalValue 
from TableDetail 
where id in 
(select isnull(T2.id,T1.id) 
from TableA T1 on T.id = T1.id and T1.Num = @num 
left join TableB T2 on T.id = T2.id and T2.Num = @num) 
3

從UI由值替換200,你可以做這樣的:

declare @id int 

select @id = id from TableB where Num = 200 

if(@id is null) 
begin 
    select @id = id from TableA where id = 200 
end 

select FinalValue from Detail where id = @id