Союз и если существует - не работают вместе - Пожалуйста, помогите - PullRequest
2 голосов
/ 05 апреля 2010

Мне нужно получить фиктивные значения, если они не возвращают строки из таблицы. Если существует, работает само по себе, но выдает ошибку с объединением. Может кто-нибудь подсказать мне решение или обходной путь?

create table test1 (col1 varchar(10))    
create table test2 (col1 varchar(10))    
create table test3 (col1 varchar(10))


insert test1 values ('test1-row1')    
insert test1 values ('test1-row2')    
insert test2 values ('test2-row1')    
insert test2 values ('test2-row2')

select col1 from test1    
union    
select col1 from test2    
union    
if exists (select * from test3)    
    select col1 from test3    
else    
    select 'dummy'

Ответы [ 2 ]

9 голосов
/ 05 апреля 2010

Вы можете добавить еще одно объединение, которое возвращает фиктивную строку, если test3 пуст:

select col1 from test1    
union    
select col1 from test2    
union    
select col1 from test3    
union
select 'dummy' where not exists (select * from test3)
0 голосов
/ 05 апреля 2010

Я считаю, что вы не можете использовать, если так. Оператор IF должен контролировать поток управления, теперь выбор данных. Измените запрос на

IF exists (select * from test3)
BEGIN
--query all three
END
ELSE
BEGIN
--query just two
END
...