teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

変更

2016/12/30 15:15

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -22,7 +22,7 @@
22
22
  ```
23
23
 
24
24
  RDBは、配列形式の項目が得意ではないので、テーブルを変更されるのは良いと思います。
25
- 上記はちょっと面倒なのでもう少し簡単なのを(ちょっと遅いですが)
25
+ 上記はちょっと面倒なのでもう少し簡単なのを(大量件数だとちょっと遅いですが)
26
26
 
27
27
  ```sql
28
28
  select m.id,

3

追加

2016/12/30 15:15

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -19,4 +19,16 @@
19
19
  +------+-------+-------+--------+
20
20
  1 row in set (0.01 sec)
21
21
 
22
+ ```
23
+
24
+ RDBは、配列形式の項目が得意ではないので、テーブルを変更されるのは良いと思います。
25
+ 上記はちょっと面倒なのでもう少し簡単なのを(ちょっと遅いですが)
26
+
27
+ ```sql
28
+ select m.id,
29
+ (select spec from specs where specs.id=spec1) spec1,
30
+ (select spec from specs where specs.id=spec2) spec2,
31
+ ...(略)
32
+ (select spec from specs where specs.id=spec10) spec10
33
+ from member m join ability a on ability_id=a.id where m.id=1;
22
34
  ```

2

変更

2016/12/30 15:14

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  こんな感じでは、(略は同じにしていますが。。。)
2
2
 
3
3
  ```sql
4
- select t1.* from member m join
4
+ select m.id, t1.* from member m join
5
5
  ( select a.id,
6
6
  max(case when spec1=s.id then spec else null end) spec1,
7
7
  max(case when spec2=s.id then spec else null end) spec2,

1

変更

2016/12/30 15:02

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -9,7 +9,7 @@
9
9
  max(case when spec10=s.id then spec else null end) spec10
10
10
  from ability a cross join specs s where s.id in (spec1,spec2,...(略),spec10)
11
11
  group by 1) t1
12
- using (id)
12
+ on ability_id=t1.id
13
13
  where m.id=1;
14
14
 
15
15
  +------+-------+-------+--------+