Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

レコードを指定項目の数値分取得する

OracleのSQL文について質問させて頂きます。 以下のようなテーブルが存在するとします。 ID  品名  個数 001 みかん 1 002 りんご 2 003 ぶどう 2 このテーブルから、以下のような結果を取得したいのです。 ID  品名  個数 001 みかん 1 002 りんご 2 002 りんご 2 003 ぶどう 2 003 ぶどう 2 個数の数だけレコードを返す形です。 どういうSQLを組めばよいのか、わかりません。 お手数ですが、どなたかわかる方いらっしゃいましたら ご回答頂けますと幸いです。よろしくお願い致します。

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

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

初心者のため見当違いであればお許しください。 ひとつダミーのテーブル(dummy)を準備しておきます。 create table dummy (countd int); countd --------- 1 2 3 4 5 6 7 ... 最大値は、テーブルfruitのmax(個数)以上です。 SQL文は、 select id,品名,個数 from fruit CROSS JOIN dummy where 個数>=cound; ですが、どうでしょうか。

NEIRO_ME
質問者

お礼

お礼が遅れましてすみません。 「CROSS JOIN」は確かによいと思うのですが、 残念ながらMAX値がわからないので……。 でも、工夫次第でできそうな気がしますね。 ご親切に回答くださったのに、 お礼が遅れて本当に申し訳ありませんでした。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

#1です。 クライアント側での処理をさぼるために、サーバ側から受け取るデータ量を2倍、3倍、あるいはそれ以上としていいかどうか考えてみてください。 例えば、のべ1万件受け取ればいいものを、2万件や3万件なら、まだ差は気にならないかも知れません。 これがデータ量や時間が蓄積していき、のべ1億件受け取ればいいものを、2億件や3億件になっても許容できるのでしょうか? これが許容できるのなら、冗長なSQLにしてもいいと思います。

NEIRO_ME
質問者

お礼

お返事が遅くなりました。 ご親切に回答下さっているのにすみません。 件数に関しては、最大件数が5000以下までと決まっているので 問題ないと思います。

すると、全ての回答が全文表示されます。
回答No.1

こういった処理は、SQLでなくアプリケーションでやった方がシンプルで性能も出ます。SQLで無理矢理やろうとすると、冗長になるだけです。

NEIRO_ME
質問者

お礼

chukenkenkouさん、ご回答ありがとうございます。 やはり一括のSQLでやるのは難しいでしょうか。 諸事情ありまして、アプリケーションなどを作成すると 開発以外の部分で手間が増えるのです。 それでSQLだけでできればなと思ったのですが…… 多少無理やりでもよかったのですが、 方法がないのであれば、chukenkenkouさんの仰るとおり、 SQLだけで行うのはやめることにします。 ご親切にお答えくださり、ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A