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

回答編集履歴

4

推敲

2020/08/14 05:53

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -48,5 +48,4 @@
48
48
  left join meter1 ON base.observed= meter1.observed and base.id = meter1.id
49
49
  left join meter2 ON base.observed= meter2.observed and base.id = meter2.id
50
50
  left join camera ON base.observed= camera.recorded and base.id = camera.id
51
- ```
51
+ ```
52
- 速度的にはhatenaさんの回答の記述の方が早いと思われます。

3

追記

2020/08/14 05:53

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -31,4 +31,22 @@
31
31
  left join mybook2 ON base.id = mybook2.id
32
32
  left join mybook3 ON base.id = mybook3.id
33
33
  left join mybook4 ON base.id = mybook4.id
34
- ```
34
+ ```
35
+
36
+ 質問が変更されたので追記
37
+ --
38
+ ```SQL
39
+ SELECT base.id, meter1.observed, meter2.observed, camera.recorded
40
+ FROM (
41
+ select observed, id from (
42
+ select observed, id from meter1
43
+ union all select observed, id from meter2
44
+ union all select recorded, id from camera
45
+ ) step1
46
+ group by observed, id
47
+ ) base
48
+ left join meter1 ON base.observed= meter1.observed and base.id = meter1.id
49
+ left join meter2 ON base.observed= meter2.observed and base.id = meter2.id
50
+ left join camera ON base.observed= camera.recorded and base.id = camera.id
51
+ ```
52
+ 速度的にはhatenaさんの回答の記述の方が早いと思われます。

2

追記

2020/08/14 05:48

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -12,4 +12,23 @@
12
12
  left join mybook2 ON base.id = mybook2.id
13
13
  left join mybook3 ON base.id = mybook3.id
14
14
  left join mybook4 ON base.id = mybook4.id
15
+ ```
16
+
17
+ 以下は冗長になりますが、unionマージでない分高速であるかもしれません。
18
+ 特にidに対してindexが設定されているようならさらに。
19
+ ```SQL
20
+ SELECT base.id, mybook.name, mybook2.name, mybook3.name, mybook4.name
21
+ FROM (
22
+ select id from (
23
+ select id from mybook
24
+ union all select id from mybook2
25
+ union all select id from mybook3
26
+ union all select id from mybook4
27
+ ) step1
28
+ group by id
29
+ ) base
30
+ left join mybook ON base.id = mybook.id
31
+ left join mybook2 ON base.id = mybook2.id
32
+ left join mybook3 ON base.id = mybook3.id
33
+ left join mybook4 ON base.id = mybook4.id
15
34
  ```

1

推敲

2020/08/13 14:02

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,4 +1,4 @@
1
- idを集約するのにfull outerでは無理があります。
1
+ idを集約するのに、3つ以上のテーブルでfull outerで行うには無理があります。
2
2
  一旦全てのIDのリストを取得し、それを元に結合します。
3
3
  ```SQL
4
4
  SELECT base.id, mybook.name, mybook2.name, mybook3.name, mybook4.name