• ベストアンサー

複雑なSQLを1本でまとめたい

Oracle10gで開発をしています。 1本のSQLで下記のような結果を返したいのですが、 やり方がわかりません。 どなたかご教授頂けないでしょうか? Aテーブル No  注文番号 品番 在庫数 注文数 -  ---- -- --- --- 1   001   a001  10    0 2   002   a001  5     5 3   003   b001  10    10 4   004   c001  5     2 5   005   d001  20    0 SELECT * FROM Aテーブル WHERE 在庫数 - 注文数 > 0 結果 No  注文番号 品番 在庫数 注文数 -  ---- -- --- --- 1   001   a001  10    0 4   004   c001  5     2 5   005   d001  20    0 となりますが、 これを 結果 No  注文番号 品番 在庫数 注文数 -  ---- -- --- --- 1   001   a001  10    0 2   002   a001  5     5 4   004   c001  5     2 5   005   d001  20    0 という風に、1番目の結果+1番目の結果にある商品の 他レコードも抽出したいのですが、どうしたらよいでしょうか?

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

  • ベストアンサー
  • ctrlzr
  • ベストアンサー率29% (18/62)
回答No.1

SELECT * FROM Aテーブル a WHERE EXISTS(SELECT 1 FROM Aテーブル b WHERE 在庫数 - 注文数 > 0 AND a.品番 = b.品番)

mariko0930
質問者

お礼

EXISTSというやり方があるのですね。。。 早速試してみます。 ありがとうございました。

その他の回答 (1)

回答No.2

ご自分で書いたとおり、 (1)一番目の結果を求める。 (2)1番目の結果から再度対象を検索する とすれば良いわけで、次のようなSQLで良いかと思います。 select * from Aテーブル where 品番 in (select 品番 from Aテーブル where 在庫数 - 注文数 > 0)

mariko0930
質問者

お礼

WHERE句でINしちゃえばいいのですね。。。 k_o_r_o_c_h_a_n様のように(1)、(2)と順を追って、 考えなくてはいけませんね。。。 ありがとうございました。

関連するQ&A