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;
とても丁寧かつ親切な回答ありがとうございます。
私には少し難しいですが、何とかがんばって理解します。
とても頼もしいサイトですね。
No.1
- 回答日時:
UNION ALLとIS NOT NULL条件を使えば可能ですが、あまりに非効率的です。
テーブル設計をやり直したほうがいいでしょう。
ご回答ありがとうございます。
UNION ALL と IS NOT NULLについて調べてみます。
1つのレコードに重複の可能性もある複数のnameを付けざるを得ない状況にあり困惑しております。
nameの種類は5種類くらいしかないので別テーブルにしたのですが・・・。
そして最終的にnameごとに件数をカウントしたいと思っております。
もっと効率的なやり方がありますでしょうか。
ご教示いただけるとありがたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- PHP PHP MySql ページング 2 2022/09/20 06:38
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
sqlで、600行あるテーブルを100...
-
URL と行番号の指定
-
複数JOINしているとCOUNTが正し...
-
VIEWの元のテーブルのindexって...
-
エクセルの関数について教えて...
-
複数テーブルのGROUP BY の使い...
-
selectした大量データをinsert...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
inner joinをすると数がおかし...
-
insertを高速化させたい
-
MySQL5.1.14で空白を入れるとエ...
-
#1136 - Column count doesn't ...
-
SELECT句の指定フィールドに固...
-
フィールド名を変数で指定するには
-
Unionした最後にGROUP BYを追加...
-
MySQLのint型で001と表示する方...
-
テーブル名を省略して「h.id」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
VIEWの元のテーブルのindexって...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
副問合せの書き方について
-
マイクラPC版のコマンドで効率...
-
Unionした最後にGROUP BYを追加...
-
selectした大量データをinsert...
-
SQLにて特定の文字を除いた検索...
-
[SQLServer] テーブル名からカ...
-
1テーブル&複数レコードの更新...
-
inner joinをすると数がおかし...
-
クエリ表示と、ADOで抽出したレ...
-
ある条件の最大値+1を初番する...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
insertを高速化させたい
-
PL/SQLの変数について
-
キー毎の、ある列のmaxのレコー...
おすすめ情報