質問編集履歴
7
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -96,19 +96,19 @@
|
|
96
96
|
|
97
97
|
|
98
98
|
|
99
|
-
SELECT b.
|
99
|
+
SELECT b.*, s.*
|
100
100
|
|
101
|
-
FROM
|
101
|
+
FROM base_seats AS b
|
102
102
|
|
103
103
|
|
104
104
|
|
105
105
|
LEFT OUTER JOIN seats AS s
|
106
106
|
|
107
|
-
ON b.id = s.base_seat_id AND s.event_id =
|
107
|
+
ON b.id = s.base_seat_id AND s.event_id = 1
|
108
108
|
|
109
109
|
|
110
110
|
|
111
|
-
WHERE b.
|
111
|
+
WHERE b.hall_id = 1
|
112
112
|
|
113
113
|
|
114
114
|
|
@@ -118,9 +118,9 @@
|
|
118
118
|
|
119
119
|
```sql
|
120
120
|
|
121
|
-
SELECT b.
|
121
|
+
SELECT b.*, c.*
|
122
122
|
|
123
|
-
FROM
|
123
|
+
FROM base_seats AS b
|
124
124
|
|
125
125
|
|
126
126
|
|
@@ -130,13 +130,13 @@
|
|
130
130
|
|
131
131
|
FROM seats AS s
|
132
132
|
|
133
|
-
WHERE s.event_id =
|
133
|
+
WHERE s.event_id = 1 ) AS c
|
134
134
|
|
135
|
-
ON b.
|
135
|
+
ON b.id = c.base_seat_id
|
136
136
|
|
137
137
|
|
138
138
|
|
139
|
-
WHERE b.
|
139
|
+
WHERE b.hall_id = 1
|
140
140
|
|
141
141
|
```
|
142
142
|
|
6
わかりやすくした
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
以下2つのテーブルがあります。base_seatsテーブルでは、会場(hall)にある全座席の名前(name)などの基本情報を、seatsテーブルでは、このbase_seatsテーブルをベースに、
|
5
|
+
以下2つのテーブルがあります。base_seatsテーブルでは、会場(hall)にある全座席の名前(name)などの基本情報を、seatsテーブルでは、このbase_seatsテーブルをベースに、イベントで販売する座席を登録しています。
|
6
6
|
|
7
7
|
|
8
8
|
|
5
わかりやすくした
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,19 +2,13 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
以下のような2つのテーブルがあります。base_seatsテーブルでは、会場(hall)にある全座席の名前(name)を、
|
6
|
-
|
7
|
-
seatsテーブルでは、このbase_seatsテーブルをベースに、その中から注文が紐づく座席だけ登録しています。
|
5
|
+
以下2つのテーブルがあります。base_seatsテーブルでは、会場(hall)にある全座席の名前(name)などの基本情報を、seatsテーブルでは、このbase_seatsテーブルをベースに、その中から注文が紐づく座席だけを登録しています。
|
8
6
|
|
9
7
|
|
10
8
|
|
11
|
-
また、base_seatは同じ座席で複数のイベントを開催することになるので、base_seatモデルとseatモデルは、
|
9
|
+
また、base_seatは同じ座席で複数のイベントを開催することになるので、base_seatモデルとseatモデルは、1対多の関係となります。
|
12
|
-
|
13
|
-
1対多の関係となります。
|
14
10
|
|
15
11
|
|
16
|
-
|
17
|
-
```
|
18
12
|
|
19
13
|
base_seatsテーブル
|
20
14
|
|
@@ -38,11 +32,7 @@
|
|
38
32
|
|
39
33
|
|7 | 2| 1-3|
|
40
34
|
|
41
|
-
```
|
42
35
|
|
43
|
-
|
44
|
-
|
45
|
-
```
|
46
36
|
|
47
37
|
seatsテーブル
|
48
38
|
|
@@ -66,47 +56,37 @@
|
|
66
56
|
|
67
57
|
|
68
58
|
|
69
|
-
|
59
|
+
|
70
60
|
|
71
61
|
# 欲しい結果
|
72
62
|
|
73
63
|
|
74
64
|
|
75
|
-
base_seatsテーブルをhall_id=1で抽出
|
65
|
+
base_seatsテーブルをhall_id=1で抽出、seatsテーブルをevent_id=1で抽出、両者をleft joinし、注文のついてない座席も取得します。それぞれのテーブルの件数が10万ほどあるので、抽出した結果でないと時間がかかってしまいます。
|
76
|
-
|
77
|
-
base_seatsからseatsをleft joinし、注文のついてない座席も取得します。
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|id | hall_id| name|event_id|order_id|
|
82
|
-
|
83
|
-
|---|--------|-----|--------|--------|
|
84
|
-
|
85
|
-
|1 | 1| 1-1| NULL| NULL|
|
86
|
-
|
87
|
-
|2 | 1| 1-2| 2| 1|
|
88
|
-
|
89
|
-
|3 | 1| 1-3| 3| NULL|
|
90
|
-
|
91
|
-
|4 | 1| 1-4| 4| 2|
|
92
66
|
|
93
67
|
|
94
68
|
|
95
69
|
|
96
70
|
|
97
|
-
|
71
|
+
|id | hall_id| name|base_seat_id|event_id|order_id|
|
98
72
|
|
99
|
-
|
73
|
+
|---|--------|-----|------------|--------|--------|
|
74
|
+
|
75
|
+
|1 | 1| 1-1| NULL| NULL| NULL|
|
76
|
+
|
77
|
+
|2 | 1| 1-2| 2| 1| 1|
|
78
|
+
|
79
|
+
|3 | 1| 1-3| 3| 1| NULL|
|
80
|
+
|
81
|
+
|4 | 1| 1-4| 4| 1| 2|
|
82
|
+
|
83
|
+
|
100
84
|
|
101
85
|
|
102
86
|
|
103
87
|
# やってみたこと
|
104
88
|
|
105
|
-
以下2つのsqlをつくってみましたが、どれも30秒以上かかってしまうという結果でした。
|
106
|
-
|
107
|
-
以下のものは両テーブルをそれぞれ抽出したものを結合するというようにはなっていないのですが、
|
89
|
+
以下2つのsqlをつくってみましたが、どれも30秒以上かかってしまうという結果でした。以下のものは両テーブルをそれぞれ抽出したものを結合するというようにはなっていないのですが、サブクエリ同士を結合するというやり方はWEB検索して見当たりませんでした。
|
108
|
-
|
109
|
-
サブクエリ同士を結合するというやり方はWEB検索して見当たりませんでした。
|
110
90
|
|
111
91
|
|
112
92
|
|
4
質問をよりわかりやすくした
test
CHANGED
File without changes
|
test
CHANGED
@@ -68,11 +68,33 @@
|
|
68
68
|
|
69
69
|
```
|
70
70
|
|
71
|
-
#
|
71
|
+
# 欲しい結果
|
72
72
|
|
73
|
-
base_seatsテーブルから、seatsテーブルをLEFT JOINし、注文のついていない座席も取得したいです。
|
74
73
|
|
74
|
+
|
75
|
+
base_seatsテーブルをhall_id=1で抽出し、seatsテーブルをevent_id=1で抽出し、
|
76
|
+
|
77
|
+
base_seatsからseatsをleft joinし、注文のついてない座席も取得します。
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
|id | hall_id| name|event_id|order_id|
|
82
|
+
|
83
|
+
|---|--------|-----|--------|--------|
|
84
|
+
|
85
|
+
|1 | 1| 1-1| NULL| NULL|
|
86
|
+
|
87
|
+
|2 | 1| 1-2| 2| 1|
|
88
|
+
|
89
|
+
|3 | 1| 1-3| 3| NULL|
|
90
|
+
|
91
|
+
|4 | 1| 1-4| 4| 2|
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
75
|
-
|
97
|
+
それぞれのテーブルの件数が10万ほどあるので、left joinの前にbase_seatsは、hall_idで抽出し、
|
76
98
|
|
77
99
|
また結合先のseatsテーブルは、event_idで抽出しないと、時間がかかってしまいます。
|
78
100
|
|
3
改善
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,22 +1,16 @@
|
|
1
|
-
チケットを販売するWEBサイトを予定しています。
|
2
|
-
|
3
1
|
環境はMySQL8.0, Rails6ですが、ActiveRecordの前にSQLを組み立てようとしています。
|
4
2
|
|
5
3
|
|
6
4
|
|
7
|
-
以下
|
5
|
+
以下のような2つのテーブルがあります。base_seatsテーブルでは、会場(hall)にある全座席の名前(name)を、
|
8
6
|
|
9
|
-
base_seatsテーブルでは、会場(hall)にある全座席の名前(name)を、
|
10
|
-
|
11
|
-
seatsテーブルでは、このbase_seatsテーブルをベースに、その中から注文が紐づく
|
7
|
+
seatsテーブルでは、このbase_seatsテーブルをベースに、その中から注文が紐づく座席だけ登録しています。
|
12
8
|
|
13
9
|
|
14
10
|
|
15
|
-
また、base_seatは同じ
|
11
|
+
また、base_seatは同じ座席で複数のイベントを開催することになるので、base_seatモデルとseatモデルは、
|
16
12
|
|
17
|
-
|
13
|
+
1対多の関係となります。
|
18
|
-
|
19
|
-
|
20
14
|
|
21
15
|
|
22
16
|
|
@@ -78,9 +72,9 @@
|
|
78
72
|
|
79
73
|
base_seatsテーブルから、seatsテーブルをLEFT JOINし、注文のついていない座席も取得したいです。
|
80
74
|
|
81
|
-
ただし、それぞれのテーブルの件数が10万ほどあるので、base_seatsは、hall_idで抽出し、
|
75
|
+
ただし、それぞれのテーブルの件数が10万ほどあるので、left joinの前にbase_seatsは、hall_idで抽出し、
|
82
76
|
|
83
|
-
また結合先のseatsテーブルは、event_idで抽出しないと、
|
77
|
+
また結合先のseatsテーブルは、event_idで抽出しないと、時間がかかってしまいます。
|
84
78
|
|
85
79
|
|
86
80
|
|
2
文章の改善
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
# 抽出したテーブル同士を
|
1
|
+
# 抽出したテーブル同士をLEFT JOINするやり方
|
test
CHANGED
@@ -6,17 +6,15 @@
|
|
6
6
|
|
7
7
|
以下、単純化しましたが、以下のような2つのテーブルがあります。
|
8
8
|
|
9
|
-
base_seatsテーブルでは、会場(hall)にある全座席の
|
9
|
+
base_seatsテーブルでは、会場(hall)にある全座席の名前(name)を、
|
10
10
|
|
11
|
-
seatsテーブルでは、このbase_seatsテーブルの中から
|
11
|
+
seatsテーブルでは、このbase_seatsテーブルをベースに、その中から注文が紐づく販売する座席だけ登録しています。
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
また、base_seat
|
15
|
+
また、base_seatは同じ会場で複数のイベントを開催することになるので、
|
16
16
|
|
17
17
|
base_seatモデルとseatモデルは、1対多の関係となります。
|
18
|
-
|
19
|
-
|
20
18
|
|
21
19
|
|
22
20
|
|
@@ -28,7 +26,7 @@
|
|
28
26
|
|
29
27
|
|
30
28
|
|
31
|
-
|id | hall_id|
|
29
|
+
|id | hall_id| name|
|
32
30
|
|
33
31
|
|---|--------|-----|
|
34
32
|
|
1
間違い修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -114,7 +114,7 @@
|
|
114
114
|
|
115
115
|
|
116
116
|
|
117
|
-
WHERE b.`
|
117
|
+
WHERE b.`hall_id` = 16
|
118
118
|
|
119
119
|
|
120
120
|
|
@@ -142,7 +142,7 @@
|
|
142
142
|
|
143
143
|
|
144
144
|
|
145
|
-
WHERE b.`
|
145
|
+
WHERE b.`hall_id` = 16
|
146
146
|
|
147
147
|
```
|
148
148
|
|