• ベストアンサー
  • すぐに回答を!

select句副問い合わせ 値の個数が多すぎます

SQL初心者です。 ORACLEで、SELECT句に副問い合わせを付けたところ、ORA-00913:値の個数が多すぎますとエラーになってしまいます。 解決法をご教授願います。 同一テーブルの同一項目を複数項目として取得したいのです。 SELECT (SELECT B.DDD ,B.EEE FROM A_MST A ,B_MST B WHERE A.AAA = B.BBB AND A.BBB = CMST.CCC), (SELECT B.DDD ,B.EEE FROM A_MST A ,B_MST B WHERE A.AAA = B.BBB AND A.BBB = CMST.FFF) FROM C_MST CMST WHERE CMST.A_RYAKU = '123'

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数17647
  • ありがとう数6

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

  • ベストアンサー
  • 回答No.2

WITH AB AS ( SELECT B.DDD AS DDD ,B.EEE AS EEE ,A.BBB AS BBB FROM A_MST A ,B_MST B WHERE A.AAA = B.BBB ) SELECT (SELECT A.DDD FROM AB A WHERE A.BBB = CMST.CCC) AS DDD_CCC ,(SELECT A.EEE FROM AB A WHERE A.BBB = CMST.CCC) AS EEE_CCC ,(SELECT A.DDD FROM AB A WHERE A.BBB = CMST.FFF) AS DDD_FFF ,(SELECT A.EEE FROM AB A WHERE A.BBB = CMST.FFF) AS EEE_FFF FROM C_MST CMST WHERE CMST.A_RYAKU = '123'

共感・感謝の気持ちを伝えよう!

質問者からのお礼

WITHを使わせてもらうことにしました。 ありがとうございます。

関連するQ&A

  • 異なるテーブルのレコード削除

    オラクル初心者です。宜しくお願いします。 AAA、BBB、CCCというテーブルがあると仮定します。 画面から入力された値(ddd)をキーとして、CCCテーブルから該当するレコードをセレクト文で引っ張り、eeeという値を抜き出したとします。 そのeeeという値をキーにAAA、BBBテーブルのレコードを削除するにはどういうSQLを発行すればよろしいでしょうか? "delete from AAA, BBB where eee = (select eee from CCC where fff = ddd);" では駄目でした。 質問が下手でわかりにくいかもしれませんが、どうかご教授お願いします。

  • Excelの関数に詳しい方、お願いします。

    わかりづらい説明かもしれませんが、よろしくお願いします。 例として、 AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF ・ ・ ・ といった文字列がエクセルの先頭列A1~A100までずらりと並んでいるとします。 各アルファベットには任意の数字(日付など)が入るとして、この並んだ百件のデータからCCCの部分の最大値を表示するための適切な関数があれば教えていただけないでしょうか? 現在少々急いでいるため言葉足らずで申し訳ありませんが、よろしくお願いいたします.

  • 複数のテーブルを使ってselectしたい

    以下のようなことをしようと思っていますが、いろいろやってみてもできなかったのでお尋ねします。 ログインのログを集計しています。 テーブルの構成は大まかには ID logintime aaa 2004-11-10 10:10:10 bbb 2004-11-10 10:10:11 ccc 2004-11-10 10:10:12 aaa 2004-11-10 10:10:13 aaa 2004-11-10 10:10:14 という構成です。 これが1日ごとに、 log_20041108 log_20041109 log_20041110 log_20041111 という感じで並んでいます。 それで、やりたいことは「ユニークログイン数のカウント」です。 1日であれば > select count(distinct id) from log_20041111; などでできると思うのですが、 (上記の例で行くとこれは3になりますね。) これをイメージ的には > select count(distinct id) from log_20041111,log_20041110,log_20041109; のように、複数のテーブルでやりたいのです。 ID logintime aaa 2004-11-11 10:10:10 bbb 2004-11-11 10:10:11 ccc 2004-11-11 10:10:12 aaa 2004-11-11 10:10:13 aaa 2004-11-11 10:10:14 ID logintime aaa 2004-11-10 10:10:10 bbb 2004-11-10 10:10:11 ddd 2004-11-10 10:10:12 aaa 2004-11-10 10:10:13 ID logintime aaa 2004-11-09 10:10:10 bbb 2004-11-09 10:10:11 eee 2004-11-09 10:10:12 これに対して、「5」という結果が取り出したいのです。 (aaa, bbb, ccc, ddd, eeeの5人) 何かいい方法がないでしょうか?? 宜しくお願い致します。

    • ベストアンサー
    • MySQL

その他の回答 (3)

  • 回答No.4

テストしとらんけどクロス結合じゃダメなんかな? イメージ的にはこんな感じ WITH AB AS(SELECT A.AAA, A.BBB, B.BBB as BBB2, B.DDD, B.EEE FROM A_MST A, B_MST B), SELECT DISTINCT A.DDD, A.EEE, B.DDD, B.EEE FROM AB A CROSS JOIN AB B WHERE A.AAA = B.BBB2 AND EXISTS( SELECT 1 FROM C_MST CMST WHERE CMST.A_RYAKU = '123' AND ( (CMST.CCC = A.BBB OR CMST.FFF = A.BBB) OR (CMST.CCC = B.BBB OR CMST.FFF = B.BBB) ) ) . まぁ、どう転んでも効率悪いからテーブルそのものの 正規化することをおすすめします。 親子関係があるのならせめて CONNECT BY使えるようにするとか。。。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

WITHを使うことにしました。 ありがとうございました。

  • 回答No.3
  • 3rd_001
  • ベストアンサー率66% (115/174)

エラーの原因は「スカラー副問合せ式」が複数行を返せないからです。 >スカラー副問合せ式は、1つの行から1つの列値のみを戻す副問合せです。 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/expressions.html#4573 「1列だけ返しなさい」と怒られて「ORA-00913:値の個数が多すぎます」が発生するわけです。 まあ、素直に書くと結合で書きます。 「A_MAST」と「B_MAST」を二回読むので効率はよろしくなさそうですが、工夫してみてください。 select b.ddd as col1, b.eee as col2, y.ddd as col3, y.eee as col4 from c_mast as CMST left outer join A_MAST AS a ON a.bbb = cmst.ccc left outer join B_MAST AS b ON b.aaa = a.bbb left outer join A_MAST AS x ON x.bbb = cmst.fff left outer join B_MAST AS y ON y.aaa = x.bbb WHERE CMST.A_RYAKU = '123' ;

共感・感謝の気持ちを伝えよう!

質問者からのお礼

スカラー副問い合わせというのですね。 ありがとうございました。

  • 回答No.1

質問に書かれているSQLは、構文が正しくないので、エラーになっていると思いますよ。 多分、こんな感じで良いんじゃないかと。 SELECT CASE WHEN A.BBB=CMST.CCC THEN B.DDD END, CASE WHEN A.BBB=CMST.CCC THEN B.EEE END, CASE WHEN A.BBB=CMST.FFF THEN B.DDD END, CASE WHEN A.BBB=CMST.FFF THEN B.EEE END FROM A_MST A,B_MST B WHERE A.AAA=B.BBB AND (A.BBB=CMST.CCC OR A.BBB=CMST.FFF) AND CMST.A_RYAKU = '123;

共感・感謝の気持ちを伝えよう!

質問者からのお礼

こんなやり方もあるのですね。 ありがとうございます。

関連するQ&A

  • VBAでCSV内にある改行を取る方法

    あるシステムが吐くcsvファイルの項目の中に改行が入っているものがあります。 例) 01,aaa,bbb(改行)bbb,ccc(改行) 02,ddd,eee,fff(改行) 03,ggg(改行)ggg,hhh,iii(改行) このCSVファイルをエクセルのマクロで読み込んでシートに展開したい のですが、項目中にある改行で別レコードを認識してしまいます。 結果) A B C D ---+---+---+--- 01 aaa bbb  bbb ccc 02 ddd eee fff 03 ggg ggg hhh iii これを以下のようにしたいのですが・・・ A B C D ---+------+------+---- 01 aaa bbbbbb ccc 02 ddd eee fff 03 gggggg hhh iii どうやればよいでしょうか? ご教授お願いいたします。

  • WHERE句の条件の記述の順序

    PRIMARY KEYとINDEXがテーブルに設定されている場合、 検索条件に記述する順番はどのようになるのでしょうか? 下記のテーブルがあり、SELECT文をつくろうと 考えています。 テーブル:foo 項目  PRIMARY KEY  INDEX ----------------------------------- a 1 b 2 1 c 3 d 2 (1)PRIMARY KEYを優先してWHERE句の順番を決める↓ SELECT * FROM foo WHERE a = "AAA" AND b = "BBB" AND c = "CCC" AND d = "DDD" (2) それともINDEXが設定されている項目を先に記述する↓ SELECT * FROM foo WHERE b = "BBB" AND d = "DDD"   AND a = "AAA" AND c = "CCC" (1)と(2)ではどちらの性能がよいのでしょうか?

  • case whenとsum関数の併用について

    Oracle9iのSQLPLUSにて、select結果の最終行に合計を出力したいだけなのですが、以下のようにcase when~と、sumを併用した場合に正しい合計値が集計されません。 select AAA,BBB,CCC,sum(DDD),(case when sum(EEE < 0 then sum(EEE-(EEE*2)) else sum(EEE) end) from table_A group by GROUPING SETS(AAA,BBB,CCC),()); AAA,BBB,CCC,270,270 AAA,BBB,CCC,-270,-270 AAA,BBB,CCC,60,60 , , ,60,600 600×⇒60○ もしくは他に最終行にうまく合計値を出力する方法はありますでしょうか? よろしくお願いします。

  • Excelで同一のデータを抽出して横並びに

    A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  ccc     4 bbb      12  ddd     6 ccc     10  aaa     22 ddd     6   eee     10 eee     5   bbb     7 fff       8 kkk 9 kkk 7 lll 4 上記のようなデータを 以下のように同じ商品コードを横並びに表示させたいのですが どういったcountifとかで試したのですが上手くいかず、どのような関数を使えば可能でしょうか? A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  aaa     22 bbb      12  bbb     7 ccc     10  ccc     4 ddd     6   ddd     6 eee     5   eee     10 fff       8 kkk 7 kkk 9 lll 4 宜しくお願い致します。

  • CSVデータをツリー表示させたい

    業務で、WEBサイトにCSVデータを表示させたいと考えています。 CSVデータは、毎日更新されるもので、行数も日々変更されます。 項目の中に「レベル」という項目があり、この「レベル」の値を使って、 ツリー表示出来ないかと考えています。 希望としては、決められたフォルダに決められたファイル名で、 CSVデータを置けば、自動的にWEB上にツリー表示されるという ことです。 J-query等で、これを実現出来るプラグインが無いか探しているのですが、 なかなか希望に合うものが見つからず、困っています。 (CSVをWEB表示するものは見つかるのですが、ツリー表示出来る ものが見つかりません) 何か、良い方法があれば、ご教示頂けませんでしょうか? 例 コード  レベル 品名  規格 ・・・・    コード     レベル 品名  規格 ・・・・  1234    1   AAA   aaa       -1234       1    AAA   aaa 2345    2   BBB   bbb        &#8735;2345     2    BBB  bbb 3456    3   CCC   ccc          &#8735;3456   3    CCC  ccc 4567    3   DDD   ddd          &#8735;4567   3    DDD  ddd 5678    3   EEE   eee           &#8735;5678   3    EEE  eee 6789    4   FFF   fff             &#8735;6789  4    FFF   fff 7890    3   GGG  ggg           &#8735;7890   3    GGG  ggg

  • 別シートの値を検索して一致したものを合計する

    excelvba初心者です。 お手数おかけします。 難問なのかどうかもよく分からず。。困っています。 シート1       シート2   シート3 AAA 100     AAA 50      BBB 20 BBB 200   CCC 150   CCC 30 DDD 300   QQQ 250   DDD 10 EEE 400     WWW 350  RRR 40 上記の値を決められた順番に別シートに集計したい(その時に、値を1/10にしたい) シート4 AAA 150 BBB 220 CCC 180 DDD 310 EEE 400 FFF 0 GGG 0 www 350 findでAAAを検索し見つかった値を ifにて条件分岐させるものをつくったものの プロシャーシーが大きすぎと言われてできません。 どなたか教えていただけないでしょうか。

  • EXELで困っています。どなたか助けてください!

    お世話になります。早速ですが・・・ 下記のような表があります。 ┌──────┬─-─┬─-─┬─-─┬─-─┬─-─┬─-─┬─-─┐ │分類項目・・・・│AAA │BBB │CCC │DDD │EEE │FFF │GGG │     ├──────┼─-─┴─-─┴─-─┴─-─┴─-─┴─-─┴─-─┤ │「、」区切り・・・│AAA、BBB、CCC、DDD、EEE、FFF、GGG        │ ├──────┼──────────────────────-─┤ │「 」区切り・・・│AAA BBB CCC DDD EEE FFF GGG        │     ├──────┼──────────────────────-─┤ │「,」区切り・・・・│AAA,BBB,CCC,DDD,EEE,FFF,GGG             │ └──────┴──────────────────────-─┘ ■不特定の分類項目(何が記入されるかわかりません)のAAなどの  項目を上図、および、下記のように自動的に変換というか、並べ  られるようにしたいと思っています。 (1)「、」区切り(全角句点区切り) (2)「 」区切り(全角スペース区切り) (3)「,」半角句点区切り ■【質問1】VBAマクロを使わず関数などの処理にてできない       ものでしょうか?   また、  【質問2】(1)上図で「、」で区切ったもの        (2)同様に「 」で区切ったもの        (3)同様に「,」 で区切ったもの        例えとして⇒○「AAA、BBB       」             ⇒×「AAA、BBB、、、、、、、」        このようにしたいのですが?   【質問3】いずれの場合も、その新しくできた文字列を他の        ソフトウェアにコピペしようとすると、関数の数式が        コピペされてしまします。        もちろんセルをワンクリックで選択すると、値だけが        コピペできます。        この点を初心者でも失敗(数式のコピペではなく)する        ことなく、値だけをコピペすることが可能でしょうか? どうかよろしくお願いいたします。 <( _ _ )> 

  • 値の取得

    sql文ですべてのデータを取り出し、一行ずつボタンを一つ付きます。 jsp側 id | name aaa | bbb | ボタン ccc | ddd | ボタン eee | fff | ボタン ボタンをおしたら selvet側でもしeeeとfffの値を取得しようとしたら、 どうすれば取れるでしょうか?教えてください。 よろしくお願いします。

  • bshスクリプト で質問です。

    以下の内容のtmp.txtを aaa bbb ccc ddd eee fff 行末がbbbなら結合としたいです。 --希望結果-- aaa bbb ccc ddd eee fff この場合以下のスクリプトでうまくいかないのですが 原因を教えていただけますか? awk '{ gsub("bbb[\n]$","",$0); print }' tmp.txt OS、HP-UX11.0です。

  • SQLについて

    aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 111 111 111 111 111 111 111 112 112 112 112 112 112 111 112 113 113 113 113 113 111 114 114 114 114 114 114 111 114 114 114 114 114 114 112 114 115 115 114 114 115 111 114 115 115 114 114 115 112 116 116 116 116 116 116 111 116 116 116 116 116 116 112 116 116 116 116 116 117 111 116 116 116 116 116 117 112 118 118 118 118 118 118 118 上記のようなデータより、SQLのSELECTを使用して、以下のように抽出したいです。 抽出条件は以下が全て満たしているものとなります。 ・aaa,ccc,ddd,eee,gggが重複、hhhが小さいもの ・bbbが異なるもの aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 112 112 112 112 112 112 111 ・・・(1) 112 113 113 113 113 113 111 ・・・(1) 114 114 114 114 114 114 111 ・・・(2) 114 115 114 114 114 115 111 ・・・(2) (1)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象 (2)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象  また、hhhが小さいもの 以上、よろしくお願いします。