• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sqlのVIEWの作り方)

SQLでのVIEW作成方法とは?

このQ&Aのポイント
  • mysqlでviewを作ろうと考えています。テーブルから科目名を一回で取得できるようなViewを作りたいのですが、正しい文法でVIEWを作成する方法を教えてください。
  • sikenテーブルとkamokuテーブルからVIEWを作りたいです。VIEW名はsiken_kamokuとします。sikenテーブルからsiken_idとsiken_name、kamokuテーブルから対応する科目名を取得するVIEWを作成するにはどのようなSQL文を書けば良いですか?
  • sikenテーブルのsiken_idとsiken_name、kamokuテーブルのkamoku_name1、kamoku_name2、kamoku_name3を取得するVIEWを作成したいです。どのようなSQL文を記述すれば良いでしょうか?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

テーブル構成が怪しいのでサンプル付きで create table kamoku (kamoku_id int(3) zerofill,name varchar(20)); insert into kamoku values(1,'国語'),(2,'算数'),(3,'理科'),(4,'社会'); create table siken (siken_id int(6) zerofill, siken_name varchar(20), kamoku_id1 int(3) zerofill, kamoku_id2 int(3) zerofill, kamoku_id3 int(3) zerofill); insert into siken values(11,'試験1回目',1,2,3),(12,'試験2回目',1,3,4),(13,'試験3回目',1,2,4),(14,'卒業試験',3,4,null); そこでviewは CREATE VIEW view_siken_kamoku(siken_id,siken_name,kamoku_name1,kamoku_name2,kamoku_name3) AS select siken_id,siken_name,coalesce(k1.name,''),coalesce(k2.name,''),coalesce(k3.name,'') from siken left join kamoku as k1 on k1.kamoku_id=kamoku_id1 left join kamoku as k2 on k2.kamoku_id=kamoku_id2 left join kamoku as k3 on k3.kamoku_id=kamoku_id3; 表示は select * from view_siken_kamoku; ところで、kamoku1~3の順番などに優劣はあるのでしょうか? 特に依存関係がないならもう少しデータをきれいに持った方が効率的だと思いますが・・・

ponkiti555
質問者

お礼

とても早く回答いただきありがとうございます。 すぐに作業ににとりかかりたいとおもいます。 なお VIEW名 siken_kamoku siken_id siken_name kamoku_id1 kamoku_id2 kamoku_id3 ------------------------------------------------------- 000011 試験1回目 国語 null 理科 000012 試験2回目 国語 国語 国語 000013 試験3回目 算数 null null 000014 卒業試験 null 理科 国語 000015 卒業試験 null null null なんでもありです。優劣もとににありません。 DBの構成があまりよくないのでしょうか。。。