※ ChatGPTを利用し、要約された質問です(原文:ORACEL CROSS JOIN について)
ORACLE CROSS JOINについて
いつもお世話になっております。
以下の処理を実現するSQLをACCESSで作成してみました。
結果は正しく求められるのですが、もっとスマートな書き方があるように思いますが、いい案が思いつきません。
よろしくお願いします。
(実際にはORACLE9iを使って、PL/SQLで行う予定です・・・ORACLEに適切なSQLを教えて下さい)
●【店舗M】にある分類より、【GPM】の大分類が"B”を対象に、ディーラ・ナンバ毎のレコードを作成する
【店舗M】
│店舗│分 類│
┼──┼───┼
│A店│ 1 │
│B店│ 2 │
│C店│ 2 │
│D店│ 2 │
│E店│ 1 │
│F店│ 4 │
【GPM】
│ナンバ│分 類│大分類│
┼───┼───┼───┼
│ G1 │ 1 │ A │
│ G1 │ 2 │ A │
│ G1 │ 4 │ A │
│ G2 │ 1 │ B │ ※処理対象
│ G2 │ 2 │ B │ ※処理対象
│ G3 │ 2 │ B │ ※処理対象
│ G3 │ 3 │ B │ ※処理対象
│ G4 │ 4 │ B │ ※処理対象
│ G5 │ 1 │ B │ ※処理対象
│ G5 │ 2 │ B │ ※処理対象
│ G5 │ 3 │ B │ ※処理対象
│ G6 │ 4 │ C │
ーー結果ーー
【B店舗別ナンバ】
│店舗│ナンバ│大分類│
┼──┼───┼───┼
│A店│ G2 │ B │
│E店│ G2 │ B │
│B店│ G2 │ B │
│C店│ G2 │ B │
│D店│ G2 │ B │
│B店│ G3 │ B │
│C店│ G3 │ B │
│D店│ G3 │ B │
│F店│ G4 │ B │
│A店│ G5 │ B │
│E店│ G5 │ B │
│B店│ G5 │ B │
│C店│ G5 │ B │
│D店│ G5 │ B │
-SQL-
INSERT INTO B店舗別ナンバ ( 店舗, ナンバ, 大分類 )
SELECT 店舗M.店舗, GPM.ナンバ, GPM.大分類
FROM
( SELECT 店舗M.* FROM 店舗M
WHERE EXISTS ( SELECT * FROM GPM WHERE GPM.分類 = 店舗M.分類 )),
( SELECT GPM.* FROM GPM
WHERE EXISTS ( SELECT * FROM 店舗M WHERE 店舗M.分類 = GPM.分類 ))
WHERE GPM.大分類 = B ;