• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CREATE VIEWについて)

CREATE VIEWについて

このQ&Aのポイント
  • basecodeとaddcodeの2つのテーブルからVIEWを作成する方法について教えてください。
  • VIEWの抽出条件はbasecodeとaddcodeのnoが存在し、addcodeのnoが複数あり、同じbaseを持つ場合はanumとbnumとcnumが同一であるレコードの中で最小のdnumを抽出します。anumとbnumとcnumが異なる場合は別々に抽出します。
  • 抽出したVIEW名はbasecodeviewで、抽出したカラムはno、name、code、base、anum、bnum、cnum、dnumです。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

> 上記のSQLでanumとbnumとcnumが同一の時は > 最小のdnumのみ抽出されるということでよろしいでしょうか。 baseが同一のものの中であれば、そうなります。 ただし、 base anum bnum cnum が同じでも no が違えば別々に出力されますが、恐らくそれは問題ない動作ではないのでしょうか? 少なくとも、ご質問に例示されているデータについては例示されている通りの結果が抽出されます。 VIEW定義内のSELECT文は、特に難しい事をやっている訳ではないので、ご自身で精査されると良いと思います。 1. 2つのテーブルを no が同じもので内部結合  同じ値の no が両テーブルに存在するものだけが、取り出されます。  http://www.techscore.com/tech/sql/SQL6/06_02.html/ 2. 1で取り出されたデータを no name code base anum bnum cnum でグループ化  つまり最終的な出力項目の内の dnum 以外全てが同じものごとに一まとめにしています。  http://www.techscore.com/tech/sql/SQL5/05_08.html/ 3. 2のデータから no name code base anum bnum cnum と dnum の最小値を出力

その他の回答 (1)

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

下記の様に考えてよいでしょうか? ・basecode の no はユニーク ・basecode と addcode は no が同じ行を結合 そうであれば、no をキーに結合し、dnum 以外の出力項目でグループ化する SQL を VIEW にすれば良いかと。 例) ------------------------------------ CREATE VIEW hoge AS SELECT bc.no, bc.name, bc.code, ac.base, ac.anum, ac.bnum, ac.cnum, MIN(ac.dnum) FROM basecode bc INNER JOIN addcode ac USING(no) GROUP BY bc.no, bc.name, bc.code, ac.base, ac.anum, ac.bnum, ac.cnum ORDER BY bc.no, ac.base -- ソートする必要が無ければこの行は除去 ; ----------------------------------------

atok12abc
質問者

お礼

考え方はあっています。 まだ確認はできていませんが後日試してみます。 ありがとうございます。

atok12abc
質問者

補足

すみません。 再度確認ですが、上記のSQLでanumとbnumとcnumが同一の時は 最小のdnumのみ抽出されるということでよろしいでしょうか。

関連するQ&A