なんども、恐縮です。
Oracle[10g]のSQL文についての質問です。(新No.3)
実は、JOINが多くてどこに[ROW_NUMBER]を入れれば良いのか解りません。
[A]テーブルに
[CODE](KEY) [CODE2] のフィールドがあります。
A-1 B-1
A-2 B-2
A-3 B-3
[A2]テーブルに
[CODEB](KEY) [CODE2] のフィールドがあります。
AA-1 B-1
AA-2 B-2
AA-3 B-3
[B]テーブルに
[CODE3](KEY) [NAME-B] のフィールドがあります。
B-1 NAME-B-1
B-2 NAME-B-2
[C1]テーブルに
[NO](KEY) [LINE](KEY) [CODE] [CODEB]のフィールドがあります。
X 1 A-1 AA-2
X 2 A-3 AA-1
Y 1 A-2 AA-3
[C2]テーブルに
[NO](KEY) [LINE](KEY) [LINE2](KEY) [BIKO] のフィールドがあります。
X 1 1 BIKO-1
X 1 2 BIKO-2
結果が
[NO/LINE/CODE/CODEB/NM1/NM2/BIKO]
X 1 A-1 AA-2 NAME-B-1 NAME-B-2 BIKO-1
X 2 A-3 AA-1 (null) NAME-B-1 (null)
と、なる様にしたいのです。
要するに、のBIKOは、[C2.LINE2]の一番最小の物を取得したいのです。
SELECT C1.NO, C1.LINE, C1.CODE, C1.CODEB, B.NAMEB AS NM1, B_1.NAMEB AS NM2,
C2.LINE2, C2.BIKO
FROM ((((C1
LEFT JOIN A ON C1.CODE = A.CODE)
LEFT JOIN B ON A.CODE2 = B.CODE3)
LEFT JOIN A2 ON C1.CODEB = A2.CODEB)
LEFT JOIN B B_1 ON A2.CODE2 = B_1.CODE3)
LEFT JOIN C2 ON (C1.LINE = C2.LINE) AND (C1.NO = C2.NO)
WHERE (((C1.NO)='X'))
ORDER BY C1.NO, C1.LINE, C2.LINE2;
と、考えたのですが、結果が
X 1 A-1 AA-2 NAME-B-1 NAME-B-2 1 BIKO-1
X 1 A-1 AA-2 NAME-B-1 NAME-B-2 2 BIKO-2
X 2 A-3 AA-1 (null) NAME-B-1(null)(null)
と、出てしまいます。
どうすれば良いのでしょうか ?
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
ちゃんと理解しないうちに、なぜ質問を閉じるんですか?
前回のディスカッションの成果は何処へ行ってしまったのですか?
そもそも、C2に邪魔なデータがあるのが問題なだけなんだから、
それを排除すれば良いはずです。
LEFT JOIN C2 ON (C1.LINE = C2.LINE) AND (C1.NO = C2.NO)
↓
LEFT JOIN (select C2.*,row_number() over(partition by no,line order by line2) r from C2) C2
ON (C1.LINE=C2.LINE AND C1.NO=C2.NO and r=1)
>ちゃんと理解しないうちに、なぜ質問を閉じるんです
>か?
申し訳ございません。前回の質問に関しては、解決と
思い閉じました。
>そもそも、C2に邪魔なデータがあるのが問題なだけな
>んだから、
>それを排除すれば良いはずです。
それが、解らなかったのです・・・
ありがとうございました。
No.2
- 回答日時:
こういう所で質問するのは構わないと思いますが、質問する前にググるなりなんなり自分で調査ってしてみましたか?
ぱっと見わかんないから丸投げ~ って感じを強く受けてしまいます。
で、質問の回答っていうかアドバイスですが、SQLを組む時はいきなり全部を作ろうとしないで最小の単位のものから一つ一つ作っていくとわかりやすいですよ。
最後にJOINが多くて面倒なら(+)を使ってみたらどうでしょうか?
いくらかでも見易くなると思いますが。
この回答への補足
すみまんせん。[ROW_NUMBER]を使用する事は
解ったのですが、どこに入れれば良いのかが
解りませんでした。反省しております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- 数学 座標平面上に放物線 C1: y=ax^2+b^x+4 がある。 C1と直線 y=1に関して対称で あ 1 2023/07/16 22:27
- MySQL mysqlの結合について教えてください 1 2022/05/19 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーを起こす方法
-
CASEでBETWEEN制約
-
既にテーブルが存在する場合の...
-
truncate tableを使って複数の...
-
オラクルのUPDATEで複数テーブル
-
pro*cobol ⇔ oracle のデータ型...
-
複数レコードの複数フィールド...
-
フィールド数が異なるテーブル...
-
テーブル定義書(Oracle) 【IX】...
-
データ削除とSQL*Loaderでのイ...
-
Oracleのシーケンスありのテー...
-
テーブルに変更があったらCSV出力
-
テーブルDROPできないのです。。。
-
AccessからOracle DB(View)を...
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
UPDATEで既存のレコードに文字...
-
フラグをたてるってどういうこ...
-
ExcelのVLOOKUP関数の動作をMyS...
-
CSVファイルを読み込んでテーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
オラクルのUPDATEで複数テーブル
-
truncate tableを使って複数の...
-
エラーを起こす方法
-
データ削除とSQL*Loaderでのイ...
-
既にテーブルが存在する場合の...
-
Where句のNot条件をAnd条件にし...
-
テーブル定義書(Oracle) 【IX】...
-
複数レコードの複数フィールド...
-
CASEでBETWEEN制約
-
viewの性能
-
ORA-01630の対応方法について
-
AccessVBAにて動的にテーブルを...
-
フィールド数が異なるテーブル...
-
accessのデータをoracleへinser...
-
エクスポート不具合
-
テーブルDROPできないのです。。。
-
SELECT実行結果のレスポンス改...
-
テーブルに変更があったらCSV出力
-
現在、VBAにてUNICODEのCSVを出...
-
oracle ora-02298
おすすめ情報