- ベストアンサー
複雑な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番目の結果にある商品の 他レコードも抽出したいのですが、どうしたらよいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SELECT * FROM Aテーブル a WHERE EXISTS(SELECT 1 FROM Aテーブル b WHERE 在庫数 - 注文数 > 0 AND a.品番 = b.品番)
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
ご自分で書いたとおり、 (1)一番目の結果を求める。 (2)1番目の結果から再度対象を検索する とすれば良いわけで、次のようなSQLで良いかと思います。 select * from Aテーブル where 品番 in (select 品番 from Aテーブル where 在庫数 - 注文数 > 0)
お礼
WHERE句でINしちゃえばいいのですね。。。 k_o_r_o_c_h_a_n様のように(1)、(2)と順を追って、 考えなくてはいけませんね。。。 ありがとうございました。
お礼
EXISTSというやり方があるのですね。。。 早速試してみます。 ありがとうございました。