SQL для проверки существования значения - PullRequest
4 голосов
/ 20 февраля 2012

У меня есть 3 таблицы - TableA, TableB и TableDetail

**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

Мое требование - получить FinalValue от TableDetail на основе

Num 

(Num значение будет выбрано пользователем из пользовательского интерфейса textBox). Если в TableB есть запись для неполного Num, то используйте идентификатор таблицы B. Если нет, то используйте идентификатор таблицы A. Предполагается, что таблица A содержит записи для всех значений Num.

Например,

If Num=200:

Поскольку в TableB существует запись для Num=200, используйте соответствующий TableB id (3) и получите FinalValue из TableDetail, где id = 3, т.е.

FinalValue = 77

If Num =100:

Так как у TableBable нет записи для Num=100, используйте соответствующие TableA id (1) и получите FinalValue из TableDetail, где id = 1, т.е.

FinalValue = 99

Можете ли вы помочь мне создать такой же запрос PL / SQL. Спасибо!

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

попробуйте следующее, @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 голосов
/ 20 февраля 2012

Заменив 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
...