- ベストアンサー
CREATE VIEWについて
- 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です。
- みんなの回答 (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)
下記の様に考えてよいでしょうか? ・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 -- ソートする必要が無ければこの行は除去 ; ----------------------------------------
お礼
考え方はあっています。 まだ確認はできていませんが後日試してみます。 ありがとうございます。
補足
すみません。 再度確認ですが、上記のSQLでanumとbnumとcnumが同一の時は 最小のdnumのみ抽出されるということでよろしいでしょうか。