オンライン実行環境
下記にて「今のコード」を記入済みのため、動作を試せます。
http://sqlfiddle.com/#!17/a6df3c3/1
現状とやりたいこと
「今のコード」のSELECT文の実行結果は、下記表のようになります。
time | id | id | id | name | name | name |
---|---|---|---|---|---|---|
2020-08-11 | 1 | 1 | 1 | hoge | piyo | fuga |
2020-08-11 | 1 | 2 | 1 | hoge | piyopiyo | fuga |
2020-08-11 | 2 | 1 | 1 | hogehoge | piyo | fuga |
2020-08-11 | 2 | 2 | 1 | hogehoge | piyopiyo | fuga |
2020-08-11 | 1 | 1 | 2 | hoge | piyo | fugafuga |
2020-08-11 | 1 | 2 | 2 | hoge | piyopiyo | fugafuga |
2020-08-11 | 2 | 1 | 2 | hogehoge | piyo | fugafuga |
2020-08-11 | 2 | 2 | 2 | hogehoge | piyopiyo | fugafuga |
しかし、今得たいと思っているのは、下記です。
time | id | id | id | name | name | name |
---|---|---|---|---|---|---|
2020-08-11 | 1 | 1 | 1 | hoge | piyo | fuga |
2020-08-11 | 2 | 2 | 2 | hogehoge | piyopiyo | fugafuga |
つまり、時間とidが同じもののみを結合させて取得したいのですが、
どのようにしたらよいでしょうか。
今のコード
PostgreSQL
1create table meter1 ( 2 observed DATE, 3 id integer, 4 name varchar(10) 5); 6create table meter2 ( 7 observed DATE, 8 id integer, 9 name varchar(10) 10); 11 12create table camera ( 13 recorded DATE, 14 id integer, 15 name varchar(10) 16); 17 18insert into meter1 values('2020-08-11','1', 'hoge'); 19insert into meter1 values('2020-08-11','2', 'hogehoge'); 20insert into meter2 values('2020-08-11','1', 'piyo'); 21insert into meter2 values('2020-08-11','2', 'piyopiyo'); 22insert into camera values('2020-08-11','1', 'fuga'); 23insert into camera values('2020-08-11','2', 'fugafuga'); 24 25SELECT 26 case 27 when meter1.observed is not null then meter1.observed 28 when meter2.observed is not null then meter2.observed 29 when camera.recorded is not null then camera.recorded 30 end as "time", 31 meter1.id, meter2.id, camera.id, 32 meter1.name, meter2.name, camera.name 33FROM 34 meter1 35 FULL OUTER JOIN meter2 ON (meter1.observed = meter2.observed) 36 FULL OUTER JOIN camera ON (meter1.observed = camera.recorded)
回答3件
あなたの回答
tips
プレビュー