dポイントプレゼントキャンペーン実施中!

SQLの知識に乏しい者です。
よろしくお願い致します。


●テーブルA
・会計コード
・年度
・部署番号
・社員番号
・その他幾つかのデータ
※Where句で「年度>2002年」以降を抽出

のテーブルがあります。


この時、Bテーブルで

●テーブルB
・会計コード(主キー)
・年度
・部署番号(主キー)
・社員番号(主キー)
・その他幾つかのデータ
※Aテーブルで抽出されたデータの中から絞り込む

というテーブルを抽出するSQL文を組みたいのですが、効率の良いやり方がわかりません。


副問合せで

 Select [B表で抽出した列名…]
 From B表
 Where 会計コード = (Select 会計コード
              From A表
              Where 年度 > '2002')
 AND 部署番号 = (Select 部署番号
            From A表
              Where 年度 > '2002')

・・・・以下省略

の様に書くと効率が悪い気がしました。
(実際には、副問合せが6個書くことになるため)

良い書き方を知っている方がいらっしゃいましたら、よろしくお願い致します。

A 回答 (2件)

もしかして



select * from B
where (会計コード,部署番号) in (select 会計コード,部署番号 from A where 年度>'2002')

ということ?(オラクルは複数項目を一度に比較できます)

でも、質問に書かれているSQLとは、違った結果になるような気がします。
(質問に書かれたSQLが適切でない気がする)
    • good
    • 0
この回答へのお礼

早速のご返答ありがとうございます。

質問するカテゴリが違いました。すいません。
今使っているのは「SYBASE」です。
OLACLEとほぼ変わらないと思って、ここに書いてみたのですが。
ですので、カテゴリを変えます。

select *
おそらく、「in」は使えないですよね・・・
マニュアルで見たら載っていなかったので。

質問に書いたSQLはわからないなりに、
書いてみたので間違っているのかもしれないですが、
私が求めているのはk_o_r_o_c_h_a_nさんが書いてくれたSQL文です。

もし、SYBASEでの書き方がわかればよろしくお願い致します。

お礼日時:2005/06/01 15:26

今oracle環境無いので分かりませんが。



■select [B表列名、B表列名…] from B表
where (select [A表.会計コード,A表.部署番号,…] from A表 where A表.年度 > '2002')

■select [B表列名、B表列名…] from B表
where B表.会計コード = A表.会計コード and A表.部署番号 > '2002'

どちらかでどうでしょうか。
間違ってたら適宜修正してください。
色々作成したものはコマンドプロンプト上でsql*plusを使って
set time onコマンドを書いてスクリプトを実行させて時間を計って見るといいと思います。
何でも書いてみて実験してみると結構勉強になりますよ。
    • good
    • 0
この回答へのお礼

早速ありがとうございます。

下記にも書いた通り、SYBASEというものを使っているのです。
カテゴリが違うので、試して出来なければまた質問させて頂きます。

アドバイスありがとうございました。

お礼日時:2005/06/01 15:28

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