ORACLE10gを使用しています。下記の●考えたSQLを作成しましたが、エラーにこそなりませんがレスポンスが返ってきません。
4つの参照テーブルのうち2テーブルが外部結合の場合の効率的な書き方のアドバイスをお願いします。
●やりたいこと
・AとB(主テーブル)から該当データ抽出
・Bの品番・得意先でCが存在すればCからコードを抽出し、Dが存在すればそのコードの名称をDから取得
・すごく簡単に書くと下記みたいなイメージです。エラーになりますが。
SELECT A.*,B.*,C.CD1,D.CD1NM,C.CD2,D.CD2NM,・・・
FROM A,B,C,D
WHERE
A.KEY1 = B.KEY1 AND
A.KEY2 = B.KEY2 AND
B.TOK_CD = C.TOK_CD(+) AND
B.HIN_CD = C.HIN_CD(+) AND
C.CD1 = D.CD1(+)・・・
●考えたSQL
SELECT
A.*,B.*,C.CD1,D.CD1NM,C.CD2,D.CD2NM,・・・
FROM
A,B,C,D
(
SELECT
C.MAKER_CD,
C.HIN_CD,
C.CD1,
C.CD2,
C.CD3
FROM
A,B,C
WHERE
A.KEY1 = 画面.指定 AND
A.KEY2 = 画面.指定 AND
B.MAKER_CD=C.MAKER_CD AND
B.HIN_CD = C.HIN_CD
)SUB_Q
WHERE
A.COL1 = 画面.指定 AND
A.COL2 = 画面.指定 AND
A.KEY1=B.KEY1 AND
A.KEY2=B.KEY2 AND
B.MAKER_CD = SUB_Q.MAKER_CD(+) AND
B.HIN_CD = SUB_Q.HIN_CD(+) AND
D.CD1(+) = SUB_Q.CD1 AND
D.CD2(+) = SUB_Q.CD2 AND
D.CD3(+) = SUB_Q.CD3
○参考
Dテーブルは大分類・中分類のような分類コードとその名称を管理するテーブルでCD1のみ値が入っていればそのレコードは大分類レコードでNAMEの値は大分類名という使用方法です。実際のSQLではDテーブルに別名を付けて、D1.CD1=** AND D1.CD2 IS NULL AND D.CD3 IS NULL ・・・とひとつずつ記述しますがここでは簡略化しています。
<レイアウトイメージ>
CD1|CD2|CD3|CD4|CD5|NAME
-----------------------
A|NULL|NULL|NULL|NULL|電化製品
A|a|NULL|NULL|NULL|冷蔵庫
No.1ベストアンサー
- 回答日時:
一番判りやすいのは、
select * from (select * from a,b,c where ~
) as x,d where ~;
のように、2段階に分けることかと思います。
ただ、説明にあるようなデータの意味合いから行けば、
select * from a,b,(select * from c,d where 内部結合条件) where ~;
のような書き方が考えらるような気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- ロック・パンク・メタル ハードロックバンドのPOIZONに関して教えて下さい。 2 2022/04/25 15:49
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- ドライブ・ストレージ 外付けCDドライブだけ音楽CDが読み込まない 3 2023/08/18 21:28
- 写真 CDのデータが読み取り不可能になりました 7 2023/06/27 14:11
- その他(プログラミング・Web制作) powershell で書いたプログラムでcd が動かない 5 2023/04/08 14:47
- スピーカー・コンポ・ステレオ CD-Rについて教えていただけませんか!? 9 2022/12/12 23:04
- ノートパソコン Windows Media Playerを使ってCDからCD-Rに書き込みをしたいのですが、できませ 2 2022/11/05 20:50
- アイドル・グラビアアイドル ジャニオタとアイオタ(秋元オタ)しかCDを買わない 時代のCD売上に価値はあるんですか? 同じような 1 2022/07/31 19:59
- その他(病気・怪我・症状) 一昔前はそのCDを聴くと幻覚や幻聴が現れるまるで麻薬のようなCDが売られていたんですが、そのCDを聴 1 2022/05/29 08:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
MERGE文を単体テーブルに対して...
-
select句副問い合わせ 値の個...
-
SELECTの結果で同一行を複数回...
-
select insertで複数テーブルか...
-
COUNTの取得方法(?)について...
-
複数テーブルのMAX値の行データ...
-
SQL GROUPで件数の一番多いレコ...
-
unionの結果は集計はできないで...
-
SQL文で質問です
-
外部結合とor条件混在の記述方法
-
固定値を含む結合と複数テーブ...
-
SET句内で複数の条件を指定して...
-
結合と副問い合わせの違い
-
oracleの分割delete
-
DELETE 文とEXISTSの使い方につ...
-
他のテーブルを参照した値はupd...
-
Accessで別テーブルの値をフォ...
-
Oracleでの文字列連結サイズの上限
-
SQL文で右から1文字だけ削除す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
select insertで複数テーブルか...
-
複数テーブルのMAX値の行データ...
-
固定値を含む結合と複数テーブ...
-
SQL GROUPで件数の一番多いレコ...
-
unionの結果は集計はできないで...
-
他のテーブルを参照した値はupd...
-
外部結合とor条件混在の記述方法
-
SET句内で複数の条件を指定して...
-
oracleの分割delete
-
DELETE 文とEXISTSの使い方につ...
-
集計後の数値が倍になる
-
unionでマージした副問合せを結合
-
updateの一括実行
-
サブクエリ同士をLEFT JOIN
-
select文でフリーズします。
-
COUNTの取得方法(?)について...
おすすめ情報