プロが教えるわが家の防犯対策術!

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

「SELECT文によるレコードの読み出しに」の質問画像

A 回答 (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;
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/06 14:45

UNION ALLとIS NOT NULL条件を使えば可能ですが、あまりに非効率的です。


テーブル設計をやり直したほうがいいでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
UNION ALL と IS NOT NULLについて調べてみます。

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

お礼日時:2012/02/05 22:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!