アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLで抽出可能でしょうか?

Javaでツールを作成しています。
開発環境はjava 1.4、oracle 10gです。

処理の中にデータベースからレコードを取得する箇所があります。
10,000件のデータを保持する社員テーブル(syain_tbl)から
社員番号(syain_no)をキーに社員名(syain_name)を取得します。
現時点で作成したSELECT句は以下のとおりです。

select syain_no, syain_name from syain_tbl
where syain_no in ('0001','0002','0003')

仮に'0001'と'0003'のレコードがあり、'0002'のレコードがない場合の結果は

syain_no syain_name
0001 テスト太郎
0003 テスト三郎

となります。
ですが、実現したいことは
「条件に指定した社員番号のレコードがなかったとしても、結果として取得したい」です。
つまり求めたい結果としては

syain_no syain_name
0001 テスト太郎
0002 (null)
0003 テスト三郎

です。
一時表を作成して外部結合させればうまくいきそうですが、
できればDDLなしで実現させたいです。
上記のSELECT句を修正して結果を求めることは可能でしょうか?
(WHERE句にある社員番号をIN条件にしている箇所は、
一度に複数件のレコードを取得したいので変更はできません)

A 回答 (2件)

select t1.syain_no, t1.syain_name


from syain_tbl t1,
(
 select '0001' syain_no from dual
union
 select '0002' syain_no from dual
union
 select '0003' syain_no from dual
) t2
where t1.syain_no = t2.syain_no(+)
order by t1.syain_no
;
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
記述して頂いたSQLを下記のとおりに修正したところ
求めていた結果を得ることができました。

select t2.syain_no, t1.syain_name
from syain_tbl t1,
(
 select '0001' syain_no from dual
union
 select '0002' syain_no from dual
union
 select '0003' syain_no from dual
) t2
where t2.syain_no = t1.syain_no(+)
order by t2.syain_no

お礼日時:2010/06/11 20:35

select syain_no, syain_name from syain_tbl where syain_no in ('0001','0002','0003')


union all
select syain_no, null from syain_tbl where syain_no not in ('0001','0002','0003')
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
SQLを実行してみましたが、where句で指定した('0001','0002','0003')以外の
'0004'や'0005'などの他のレコードも取得してしまいました。

お礼日時:2010/06/11 20:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!