• ベストアンサー

同じ表内の比較

oracle SQLに関する質問なのですが 社員マスタという表の中に 社員コード、社員名、上司、給料 という列があります。 上司より給料の低い社員名を検索する場合どうしたらよいでしょうか。 列 社員コード→NOT NULL CHAR(5) 社員名→NOT NULL VARCHAR2(20) 上司→CHAR(5) ※上司の社員コードが入ります。 給料→NUMBER(7) よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.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です。

uni_c_cd
質問者

お礼

回答ありがとうございます。 わかりやすくてとても参考になりました。 まさか外部結合を自己結合に使えるとは思いませんでした。 本当にありがとうございました。

その他の回答 (2)

  • auty
  • ベストアンサー率58% (284/486)
回答No.2

・ 確認はしていませんが, select a.社員コード,a.社員名,a.給料,b.社員名 as 上司 from 社員マスタ a join 社員マスタ b on a.上司 = b.社員コード where a.給料 < b.給料

uni_c_cd
質問者

お礼

回答ありがとうございます。 早速試してみます。

回答No.1

部長、課長、係長、一般社員など、3階層以上になるのですよね? 階層問い合わせについて調べれば、よい例題がたくさん見つかると思います。

uni_c_cd
質問者

お礼

回答ありがとうございます。 階層問い合わせってはじめて聞きました。 早速調べてみます。 ありがとうございました。

関連するQ&A