• ベストアンサー

SELECT文によるレコードの読み出しについて

SQL文にて上表のような2つのテーブルから下表のように mysql_fetch_arrayなどでデータを取り出したいのですが、 構文がさっぱりわかりません。 このような操作は可能なのでしょうか。 よろしくお願い致します。

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

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

見た感じid=0のデータは使っていないようですので たとえばこんな風に管理してみてはどうでしょう? //準備 create table t_record(record_id int,name_id int,id_number int,unique key(record_id,id_number)); create table t_record_name(record_id int not null primary key,record_name varchar(20)); create table t_name(name_id int not null primary key,name varchar(20)); //データ投入 insert into t_record values(1,1,1),(1,4,2),(1,2,3),(1,1,4),(2,2,1),(2,5,2),(2,1,4),(2,4,5),(3,3,1),(3,2,4),(3,5,5); insert into t_record_name values(1,'record1'),(2,'record2'),(3,'record3'); insert into t_name values(1,'○○○'),(2,'△△△'),(3,'□□□'),(4,'×××'),(5,'◎◎◎'); //初期データ表示 select rn.record_id ,rn.record_name as record ,sum((id_number=1)*name_id) as id1 ,sum((id_number=2)*name_id) as id2 ,sum((id_number=3)*name_id) as id3 ,sum((id_number=4)*name_id) as id4 ,sum((id_number=5)*name_id) as id5 ,sum((id_number=6)*name_id) as id6 from t_record_name as rn left join t_record as r using(record_id) group by record_id order by rn.record_id asc; //結果表示 select r.record_id ,rn.record_name as record ,r.name_id as id ,n.name from t_record as r left join t_record_name as rn using(record_id) left join t_name as n using(name_id) order by r.name_id asc,r.record_id asc;

nubeboy2012
質問者

お礼

とても丁寧かつ親切な回答ありがとうございます。 私には少し難しいですが、何とかがんばって理解します。 とても頼もしいサイトですね。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

UNION ALLとIS NOT NULL条件を使えば可能ですが、あまりに非効率的です。 テーブル設計をやり直したほうがいいでしょう。

nubeboy2012
質問者

お礼

ご回答ありがとうございます。 UNION ALL と IS NOT NULLについて調べてみます。 1つのレコードに重複の可能性もある複数のnameを付けざるを得ない状況にあり困惑しております。 nameの種類は5種類くらいしかないので別テーブルにしたのですが・・・。 そして最終的にnameごとに件数をカウントしたいと思っております。 もっと効率的なやり方がありますでしょうか。 ご教示いただけるとありがたいです。

関連するQ&A

専門家に質問してみよう