2016-11-12 4 views
1

クエリから行が返されない場合はnone, none, 0の行を返すことができます。 jamessmithのエントリが存在しますが、エントリがhankersのために存在しない、DBからsql - 行が存在しない場合に一定の値の行を返します。

select first, last, count(address) 
from employee 
where last in ('james', 'smith', 'hankers') 
group by first, last 
union all 
select 'none', 'none', 0 
from dual 
where not exists (select * from employee where last in ('james', 'smith', 'hankers')); 

:私はこのSQLを持っています。

ただし、このクエリはエントリが存在する場合にのみ返されます。 none, none, 0を返しません。

私はここで間違っていますか?

EDIT:3つのハードコーディングされた値をlastとして渡していますが、(:last)からgetJdbcTemplateまでの値をリストパラメータとして渡している場合は回避策を知りたいと思います。

+1

あなたは、行数を使用することができ、ここのように:http://stackoverflow.com/questions/2884996/simple-check-for-select-query-empty-result – aguetat

+0

どのデータベースを使用しましたか? – vipin

+0

@vipin Oracle db – qollers

答えて

0

すべての値を列挙すると、NOT EXISTSが適用されます。したがって、のいずれかがの値であれば、NOT EXISTSは満たされません。回避策に指定した値で、行のテーブルを使用して、それにあなたの元のテーブルを結合する左ができるように

select coalesce(t2.first, 'none'), 
     coalesce(t2.last, 'none'), 
     count(t2.address) 
from (
    select 'james' as last 
    union all 
    select 'smith' 
    union all 
    select 'hankers') t1 
left join employee t2 ON t1.last = t2.last 
group by coalesce(t2.first, 'none'), 
     coalesce(t2.last, 'none') 

一致しない場合、last='hankers'の場合のように、 count(t2.address)0と評価され、したがって'none', 'none', 0が返されます。

+0

私は参照してください。ありがとうございました。しかし、私は元の投稿ではっきりしていたはずですが、「最後の」パラメータの正確なサイズがわからなければ、回避策はありますか?この例では、ハードコードされた3つの値を 'last'として渡していますが、実際のSQLでは値を知らず、このようなリストパラメタを渡しています。 – qollers

+0

@qollersもう1つの回避策がありますすべての値を一時表に取り込みます。最後の名前に関する情報は、検索する場合は、ある種のリレーショナル構造に格納する必要があります。 –

0

これはあなたを助けるかもしれ、

_count NUMBER(10); 

select count(*) into _count 
from employee 
where last in ('james', 'smith', 'hankers'); 

if(_count > 0) 
then 
    select first, last, count(address) c 
    from employee 
    where last in ('james', 'smith', 'hankers') 
    group by first, last 
else 
    select 'none' first, 'none' last, 0 c from dual 
end if 
+0

'_count NUMBER(10);'ここでnumber変数を宣言していますか? SQL – qollers

+0

DB操作を実行するストアドプロシージャを使用している場合は、変数を宣言できます。 – vipin

関連する問題