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

質問編集履歴

4

URL修正

2020/08/14 04:22

投稿

yamekodev
yamekodev

スコア17

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ### オンライン実行環境
2
2
  下記にて「今のコード」を記入済みのため、動作を試せます。
3
- [http://sqlfiddle.com/#!17/1c36b](http://sqlfiddle.com/#!17/1c36b)
3
+ [http://sqlfiddle.com/#!17/a6df3c3/1](http://sqlfiddle.com/#!17/a6df3c3/1)
4
4
 
5
5
 
6
6
  ### 現状とやりたいこと

3

piyopiyoとすべきところがpiyoになっていたので修正

2020/08/14 04:22

投稿

yamekodev
yamekodev

スコア17

title CHANGED
File without changes
body CHANGED
@@ -5,22 +5,22 @@
5
5
 
6
6
  ### 現状とやりたいこと
7
7
  「今のコード」のSELECT文の実行結果は、下記表のようになります。
8
- | time | id | id | id | name | name | name |
8
+ | time | id | id | id | name | name | name |
9
- |------------|----|----|----|----------|------|----------|
9
+ |------------|----|----|----|----------|----------|----------|
10
- | 2020-08-11 | 1 | 1 | 1 | hoge | piyo | fuga |
10
+ | 2020-08-11 | 1 | 1 | 1 | hoge | piyo | fuga |
11
- | 2020-08-11 | 1 | 2 | 1 | hoge | piyo | fuga |
11
+ | 2020-08-11 | 1 | 2 | 1 | hoge | piyopiyo | fuga |
12
- | 2020-08-11 | 2 | 1 | 1 | hogehoge | piyo | fuga |
12
+ | 2020-08-11 | 2 | 1 | 1 | hogehoge | piyo | fuga |
13
- | 2020-08-11 | 2 | 2 | 1 | hogehoge | piyo | fuga |
13
+ | 2020-08-11 | 2 | 2 | 1 | hogehoge | piyopiyo | fuga |
14
- | 2020-08-11 | 1 | 1 | 2 | hoge | piyo | fugafuga |
14
+ | 2020-08-11 | 1 | 1 | 2 | hoge | piyo | fugafuga |
15
- | 2020-08-11 | 1 | 2 | 2 | hoge | piyo | fugafuga |
15
+ | 2020-08-11 | 1 | 2 | 2 | hoge | piyopiyo | fugafuga |
16
- | 2020-08-11 | 2 | 1 | 2 | hogehoge | piyo | fugafuga |
16
+ | 2020-08-11 | 2 | 1 | 2 | hogehoge | piyo | fugafuga |
17
- | 2020-08-11 | 2 | 2 | 2 | hogehoge | piyo | fugafuga |
17
+ | 2020-08-11 | 2 | 2 | 2 | hogehoge | piyopiyo | fugafuga |
18
18
 
19
19
  しかし、今得たいと思っているのは、下記です。
20
- | time | id | id | id | name | name | name |
20
+ | time | id | id | id | name | name | name |
21
- |------------|----|----|----|----------|------|----------|
21
+ |------------|----|----|----|----------|----------|----------|
22
- | 2020-08-11 | 1 | 1 | 1 | hoge | piyo | fuga |
22
+ | 2020-08-11 | 1 | 1 | 1 | hoge | piyo | fuga |
23
- | 2020-08-11 | 2 | 2 | 2 | hogehoge | piyo | fugafuga |
23
+ | 2020-08-11 | 2 | 2 | 2 | hogehoge | piyopiyo | fugafuga |
24
24
 
25
25
  つまり、時間とidが同じもののみを結合させて取得したいのですが、
26
26
  どのようにしたらよいでしょうか。
@@ -48,11 +48,10 @@
48
48
  insert into meter1 values('2020-08-11','1', 'hoge');
49
49
  insert into meter1 values('2020-08-11','2', 'hogehoge');
50
50
  insert into meter2 values('2020-08-11','1', 'piyo');
51
- insert into meter2 values('2020-08-11','2', 'piyo');
51
+ insert into meter2 values('2020-08-11','2', 'piyopiyo');
52
52
  insert into camera values('2020-08-11','1', 'fuga');
53
53
  insert into camera values('2020-08-11','2', 'fugafuga');
54
54
 
55
-
56
55
  SELECT
57
56
  case
58
57
  when meter1.observed is not null then meter1.observed

2

複数の条件を同時に満たすデータを取得したいのが本当にやりたかったことだったため、質問のコードを大幅に改定。

2020/08/14 04:21

投稿

yamekodev
yamekodev

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- SQL文で、FROM(テーブル1 JOIN テーブル2 ON条件)OR(テーブル2 JOIN テーブル3 ON条件)のよなことがやりたい
1
+ SQL文で、複数のテーブルから複数の条件に合データをSELECTしたい
body CHANGED
@@ -1,83 +1,68 @@
1
1
  ### オンライン実行環境
2
2
  下記にて「今のコード」を記入済みのため、動作を試せます。
3
- [http://sqlfiddle.com/#!17/b5824/2](http://sqlfiddle.com/#!17/b5824/2)
3
+ [http://sqlfiddle.com/#!17/1c36b](http://sqlfiddle.com/#!17/1c36b)
4
4
 
5
5
 
6
6
  ### 現状とやりたいこと
7
7
  「今のコード」のSELECT文の実行結果は、下記表のようになります。
8
- | id | name | name | name | name |
8
+ | time | id | id | id | name | name | name |
9
- |----|--------|----------|--------|--------|
9
+ |------------|----|----|----|----------|------|----------|
10
- | 1 | hoge | (null) | (null) | piyoyo |
10
+ | 2020-08-11 | 1 | 1 | 1 | hoge | piyo | fuga |
11
+ | 2020-08-11 | 1 | 2 | 1 | hoge | piyo | fuga |
11
- | 2 | (null) | hogehoge | (null) | (null) |
12
+ | 2020-08-11 | 2 | 1 | 1 | hogehoge | piyo | fuga |
12
- | 2 | (null) | (null) | piyo | (null) |
13
+ | 2020-08-11 | 2 | 2 | 1 | hogehoge | piyo | fuga |
14
+ | 2020-08-11 | 1 | 1 | 2 | hoge | piyo | fugafuga |
15
+ | 2020-08-11 | 1 | 2 | 2 | hoge | piyo | fugafuga |
16
+ | 2020-08-11 | 2 | 1 | 2 | hogehoge | piyo | fugafuga |
17
+ | 2020-08-11 | 2 | 2 | 2 | hogehoge | piyo | fugafuga |
13
18
 
14
19
  しかし、今得たいと思っているのは、下記です。
15
- | id | name | name | name | name |
20
+ | time | id | id | id | name | name | name |
16
- |----|--------|----------|--------|--------|
21
+ |------------|----|----|----|----------|------|----------|
17
- | 1 | hoge | (null) | (null) | piyoyo |
22
+ | 2020-08-11 | 1 | 1 | 1 | hoge | piyo | fuga |
18
- | 2 | (null) | hogehoge | piyo | (null) |
23
+ | 2020-08-11 | 2 | 2 | 2 | hogehoge | piyo | fugafuga |
19
24
 
20
- つまり今得られている2行目3行目を合させた状態で取得したいのですが、
25
+ つまり、時間idが同じもののみ合させ取得したいのですが、
21
26
  どのようにしたらよいでしょうか。
22
27
 
23
- ### 試したこと
24
- 下記のように書いてみましたがシンタックスエラーになりました。
25
- ```PostgreSQL
26
- FROM
27
- (mybook
28
- FULL OUTER JOIN mybook2 ON mybook.id = mybook2.id
29
- FULL OUTER JOIN mybook3 ON mybook.id = mybook3.id
30
- FULL OUTER JOIN mybook4 ON mybook.id = mybook4.id)
31
- OR
32
- (mybook2
33
- FULL OUTER JOIN mybook ON mybook2.id = mybook.id
34
- FULL OUTER JOIN mybook3 ON mybook2.id = mybook3.id
35
- FULL OUTER JOIN mybook4 ON mybook2.id = mybook4.id)
36
- ```
37
28
 
38
-
39
29
  ### 今のコード
40
30
  ```PostgreSQL
41
- create table mybook (
31
+ create table meter1 (
32
+ observed DATE,
42
- id integer,
33
+ id integer,
43
34
  name varchar(10)
44
35
  );
45
- create table mybook2 (
36
+ create table meter2 (
37
+ observed DATE,
46
- id integer,
38
+ id integer,
47
39
  name varchar(10)
48
40
  );
49
41
 
50
- create table mybook3 (
42
+ create table camera (
43
+ recorded DATE,
51
- id integer,
44
+ id integer,
52
45
  name varchar(10)
53
46
  );
54
47
 
55
- create table mybook4 (
48
+ insert into meter1 values('2020-08-11','1', 'hoge');
49
+ insert into meter1 values('2020-08-11','2', 'hogehoge');
56
- id integer,
50
+ insert into meter2 values('2020-08-11','1', 'piyo');
51
+ insert into meter2 values('2020-08-11','2', 'piyo');
57
- name varchar(10)
52
+ insert into camera values('2020-08-11','1', 'fuga');
58
- );
53
+ insert into camera values('2020-08-11','2', 'fugafuga');
59
54
 
60
- insert into mybook values('1', 'hoge');
61
- insert into mybook2 values('2', 'hogehoge');
62
- insert into mybook3 values('2', 'piyo');
63
- insert into mybook4 values('1', 'piyoyo');
64
- ```
65
55
 
66
- ```PostgreSQL
67
56
  SELECT
68
57
  case
69
- when mybook.id is not null then mybook.id
70
- when mybook2.id is not null then mybook2.id
58
+ when meter1.observed is not null then meter1.observed
71
- when mybook3.id is not null then mybook3.id
59
+ when meter2.observed is not null then meter2.observed
72
- when mybook4.id is not null then mybook4.id
60
+ when camera.recorded is not null then camera.recorded
73
- end as "id",
61
+ end as "time",
74
- mybook.name,
75
- mybook2.name,
62
+ meter1.id, meter2.id, camera.id,
76
- mybook3.name,
63
+ meter1.name, meter2.name, camera.name
77
- mybook4.name
78
64
  FROM
79
- mybook
65
+ meter1
80
- FULL OUTER JOIN mybook2 ON mybook.id = mybook2.id
66
+ FULL OUTER JOIN meter2 ON (meter1.observed = meter2.observed)
81
- FULL OUTER JOIN mybook3 ON mybook.id = mybook3.id
67
+ FULL OUTER JOIN camera ON (meter1.observed = camera.recorded)
82
- FULL OUTER JOIN mybook4 ON mybook.id = mybook4.id
83
68
  ```

1

URLをリンク形式に修正しました

2020/08/14 04:15

投稿

yamekodev
yamekodev

スコア17

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,9 @@
1
- オンライン実行環境
1
+ ### オンライン実行環境
2
+ 下記にて「今のコード」を記入済みのため、動作を試せます。
2
- http://sqlfiddle.com/#!17/b5824/2
3
+ [http://sqlfiddle.com/#!17/b5824/2](http://sqlfiddle.com/#!17/b5824/2)
3
4
 
5
+
6
+ ### 現状とやりたいこと
4
7
  「今のコード」のSELECT文の実行結果は、下記表のようになります。
5
8
  | id | name | name | name | name |
6
9
  |----|--------|----------|--------|--------|