回答編集履歴

1 参考

yambejp

yambejp score 50449

2018/02/21 11:00  投稿

creator_idを別テーブルに正規化すれば簡単に処理できますが
いまのままではSQLで処理するには非効率的すぎると思います
いまのままではSQLで処理するには非効率的すぎると思います
# sample
- 元テーブル
```SQL
create table tbl1(ID int unique,NAME varchar(10));
insert into tbl1 values(1,'TEST1'),(2,'TEST2'),(3,'TEST3');
create table tbl2(ID int unique,uid int,creator_id varchar(10),unique(uid,creator_id));
insert into tbl2 values(1,1,'A0001'),(2,2,'A0002'),(3,2,'A0003'),(4,3,'A0004');
create table tbl3(ID int unique,CODE varchar(10) unique,NAME varchar(10));
insert into tbl3 values(1,'A0001','テスト太郎'),(2,'A0002','テスト次郎'),(3,'A0003','テスト三郎'),(4,'A0004','テスト花子');
```
- 集計1
```SQL
select t1.ID,group_concat(distinct t.1NAME) as NAME,group_concat(creator_id) as creator_id
from tbl1 as t1
inner join tbl2 as t2 on t1.ID=t2.uid
group by ID;
```
- 集計2
```SQL
select t1.ID,group_concat(distinct t1.NAME) as NAME,group_concat(t3.NAME) as creator_name
from tbl1 as t1
inner join tbl2 as t2 on t1.ID=t2.uid
inner join tbl3 as t3 on t2.creator_id=t3.CODE
group by ID;
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る