プロが教えるわが家の防犯対策術!

oracle SQLに関する質問なのですが

社員マスタという表の中に
社員コード、社員名、上司、給料 という列があります。

上司より給料の低い社員名を検索する場合どうしたらよいでしょうか。


社員コード→NOT NULL CHAR(5)
社員名→NOT NULL VARCHAR2(20)
上司→CHAR(5) ※上司の社員コードが入ります。
給料→NUMBER(7)

よろしくお願いします。

A 回答 (3件)

これはempを使ったデモでよくあるパターンですよね。


自分自身と外部結合して比較すればよいでしょう。

<empのパターン>
select a.*,b.ename,b.sal
from emp a,
emp b
WHERE a.mgr = b.empno(+)
AND a.SAL < b.SAL
order by b.ename

<社員マスタのパターン>
select a.社員名,a.給料,b.社員名,b.給料
from 社員マスタ a,
社員マスタ b
WHERE a.上司 = b.社員コード(+)
AND a.給料 < b.給料

直属の部下と上司のみの比較ならこれでOKです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

わかりやすくてとても参考になりました。

まさか外部結合を自己結合に使えるとは思いませんでした。

本当にありがとうございました。

お礼日時:2008/07/09 00:05

・ 確認はしていませんが,



select a.社員コード,a.社員名,a.給料,b.社員名 as 上司 from 社員マスタ a join 社員マスタ b on a.上司 = b.社員コード where a.給料 < b.給料
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

早速試してみます。

お礼日時:2008/07/09 00:08

部長、課長、係長、一般社員など、3階層以上になるのですよね?


階層問い合わせについて調べれば、よい例題がたくさん見つかると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

階層問い合わせってはじめて聞きました。

早速調べてみます。

ありがとうございました。

お礼日時:2008/07/09 00:07

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