
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'
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'
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使えるようにするとか。。。
No.3
- 回答日時:
エラーの原因は「スカラー副問合せ式」が複数行を返せないからです。
>スカラー副問合せ式は、1つの行から1つの列値のみを戻す副問合せです。
http://otndnld.oracle.co.jp/document/products/or …
「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が見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
単一グループのグループ関数ではありません。
Oracle
-
Oracleで「文字が無効です」のエラーが出ます
Oracle
-
CASE文のエラーについて
Oracle
-
-
4
Statement ignored というエラー
Oracle
-
5
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
6
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
-
7
はじめまして!
Oracle
-
8
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
9
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
10
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
11
PL/SQLのコンパイルエラーについて(ignored)
Oracle
-
12
テーブルの存在チェックについて
Oracle
-
13
カーソル0件の時にエラーを発生させる
Oracle
-
14
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
15
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
16
GROUP BYを行った後に結合したい。
Oracle
-
17
オラクルのUPDATEで複数テーブル
Oracle
-
18
PL/SQLで@ファイル名が反応しません
Oracle
-
19
ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています
Java
-
20
データを削除しても表領域の使用率が減りません
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
集計後の数値が倍になる
-
select insertで複数テーブルか...
-
外部結合とor条件混在の記述方法
-
SET句内で複数の条件を指定して...
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
Oracleでの文字列連結サイズの上限
-
実績累計の求め方と意味を教え...
-
SELECTで1件のみ取得するには?
-
OracleのSQL*PLUSで、デー...
-
エラー2「無効な識別子です」
-
ADO VBA 実行時エラー3021
-
ヘッダレコードとトレーラレコ...
-
Oracle8iでSQL文の引数について
-
Excelでセルの書式設定を使用し...
-
ワードの差込印刷で教えて下さ...
-
データセットのレコード更新が...
-
レコードが存在しなかった場合
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
select insertで複数テーブルか...
-
外部結合とor条件混在の記述方法
-
MERGE文を単体テーブルに対して...
-
SQL GROUPで件数の一番多いレコ...
-
SELECTの結果で同一行を複数回...
-
oracleの分割delete
-
集計後の数値が倍になる
-
固定値を含む結合と複数テーブ...
-
SET句内で複数の条件を指定して...
-
unionでマージした副問合せを結合
-
COUNTの取得方法(?)について...
-
Access 2つのテーブルで数量...
-
他のテーブルを参照した値はupd...
-
SQLの書き方(チェックボックス)
-
SQLで複数の条件がある場合
-
複数テーブルのMAX値の行データ...
-
半角英数字混在データから数字...
-
結合と副問い合わせの違い
おすすめ情報