
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- PostgreSQL 列が存在しないと言われる 2 2023/02/10 18:33
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
このQ&Aを見た人はこんなQ&Aも見ています
-
単一グループのグループ関数ではありません。
Oracle
-
CASE文のエラーについて
Oracle
-
Statement ignored というエラー
Oracle
-
-
4
Oracleで「文字が無効です」のエラーが出ます
Oracle
-
5
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
6
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
7
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
8
PL/SQLのコンパイルエラーについて(ignored)
Oracle
-
9
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
-
10
はじめまして!
Oracle
-
11
変数が選択リストにありません
Oracle
-
12
オラクルのUPDATEで複数テーブル
Oracle
-
13
テーブルの存在チェックについて
Oracle
-
14
PL/SQL PLS-00103エラーについて
Oracle
-
15
PL/SQLカーソルの2重FORループができません
Oracle
-
16
GROUP BYを行った後に結合したい。
Oracle
-
17
PL/SQLで@ファイル名が反応しません
Oracle
-
18
select insertで複数テーブルから値を取得したい
Oracle
-
19
PL/SQLでのSQL文法
その他(データベース)
-
20
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select insertで複数テーブルか...
-
MERGE文を単体テーブルに対して...
-
SELECTの結果で同一行を複数回...
-
SQL GROUPで件数の一番多いレコ...
-
select句副問い合わせ 値の個...
-
SQLの書き方(チェックボックス)
-
SET句内で複数の条件を指定して...
-
複数テーブルのMAX値の行データ...
-
COUNTの取得方法(?)について...
-
半角英数字混在データから数字...
-
外部結合とor条件混在の記述方法
-
oracleの分割delete
-
他のテーブルを参照した値はupd...
-
OracleのSQLについて質問があり...
-
マテビューのNOTNULL設定について
-
最大値の取得
-
構成比を求めるSQL文につきまして
-
unionでマージした副問合せを結合
-
Oracleでの文字列連結サイズの上限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select insertで複数テーブルか...
-
select句副問い合わせ 値の個...
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
固定値を含む結合と複数テーブ...
-
oracleの分割delete
-
SQL GROUPで件数の一番多いレコ...
-
外部結合とor条件混在の記述方法
-
複数テーブルのMAX値の行データ...
-
unionの結果は集計はできないで...
-
unionでマージした副問合せを結合
-
他のテーブルを参照した値はupd...
-
SET句内で複数の条件を指定して...
-
結合と副問い合わせの違い
-
集計後の数値が倍になる
-
SQLの書き方(チェックボックス)
-
DELETE 文とEXISTSの使い方につ...
-
マテビューのNOTNULL設定について
-
異なるテーブルのレコード削除
おすすめ情報