SQL SQLITE, используя select для возврата строки, когда в select нет строк - PullRequest
0 голосов
/ 19 января 2012

Нужно вернуть «законсервированную» строку, если в выборке нет строк.Итак, что-то вроде

select col1 from table where col1 = 'something'

, если возвращается штраф в 1 строку или более, но если он не возвращает строк, необходимо вернуть что-то вроде 'none' в качестве col1.Есть причины для моего безумия ....

Я пытался

select 
 case when col1 is null 
 then 
  'nothing' 
 else 
  col1 
 end as col1 
from table where col1 = 'something'

Но это не вернет 'ничто', поскольку нет строк для обработки .....

Ответы [ 4 ]

1 голос
/ 19 января 2012

Добавление RIGHT JOIN должно дать вам то, что вам нужно:

select COALESCE(col1, fake.filler) as col1
from table 
  right join (select 'nothing' as [filler]) fake 
  on col1 = 'something'

Или как LEFT JOIN (менее элегантно):

select COALESCE(col1, fake.filler) as col1
from (select 'nothing' as [filler]) fake 
  left join table
  on col1 = 'something'

По общему признанию, @Joe Stefanelli прав, что этоповедение не относится к уровню извлечения данных.Но если вы абсолютно обязаны ...

0 голосов
/ 19 января 2012

В Oracle я бы написал так:

select col1 from table 
where col1 = 'something'
union all
select 'Nothing' from dual 
where not exists (select 1 from table where col1 = 'something')

Я не знаю, как эмулировать dual в sqlite.

Обновление: Как я вижу, from можно опустить, поэтому ответ может быть:

select col1 from table 
where col1 = 'something'
union all
select 'Nothing'  
where not exists (select 1 from table where col1 = 'something')
0 голосов
/ 19 января 2012

Единственное, что я могу придумать, это

if exists(select col1 from table where col1 = 'something') 
select col1 from table where col1 = 'something'
else 'nothing'
0 голосов
/ 19 января 2012

По моему мнению, это лучше обрабатывать в коде вашего приложения, чем пытаться навязать искусственное значение на стороне базы данных. Просто проверьте ноль строк в наборе результатов и сделайте замену в это время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...