回答編集履歴

1

参考

2018/02/21 02:00

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -1,3 +1,61 @@
1
1
  creator_idを別テーブルに正規化すれば簡単に処理できますが
2
2
 
3
3
  いまのままではSQLで処理するには非効率的すぎると思います
4
+
5
+
6
+
7
+ # sample
8
+
9
+
10
+
11
+ - 元テーブル
12
+
13
+ ```SQL
14
+
15
+ create table tbl1(ID int unique,NAME varchar(10));
16
+
17
+ insert into tbl1 values(1,'TEST1'),(2,'TEST2'),(3,'TEST3');
18
+
19
+ create table tbl2(ID int unique,uid int,creator_id varchar(10),unique(uid,creator_id));
20
+
21
+ insert into tbl2 values(1,1,'A0001'),(2,2,'A0002'),(3,2,'A0003'),(4,3,'A0004');
22
+
23
+ create table tbl3(ID int unique,CODE varchar(10) unique,NAME varchar(10));
24
+
25
+ insert into tbl3 values(1,'A0001','テスト太郎'),(2,'A0002','テスト次郎'),(3,'A0003','テスト三郎'),(4,'A0004','テスト花子');
26
+
27
+ ```
28
+
29
+
30
+
31
+ - 集計1
32
+
33
+ ```SQL
34
+
35
+ select t1.ID,group_concat(distinct t.1NAME) as NAME,group_concat(creator_id) as creator_id
36
+
37
+ from tbl1 as t1
38
+
39
+ inner join tbl2 as t2 on t1.ID=t2.uid
40
+
41
+ group by ID;
42
+
43
+ ```
44
+
45
+
46
+
47
+ - 集計2
48
+
49
+ ```SQL
50
+
51
+ select t1.ID,group_concat(distinct t1.NAME) as NAME,group_concat(t3.NAME) as creator_name
52
+
53
+ from tbl1 as t1
54
+
55
+ inner join tbl2 as t2 on t1.ID=t2.uid
56
+
57
+ inner join tbl3 as t3 on t2.creator_id=t3.CODE
58
+
59
+ group by ID;
60
+
61
+ ```