前提・実現したいこと
SQLについての質問です。
よろしくお願いします。
SQL
1CREATE TABLE Table1 2 ("column1" varchar2(4) PRIMARY KEY, "column2" varchar2(3) ) 3; 4 5INSERT ALL 6 INTO Table1 ("column1", "column2") 7 VALUES ('REI1', 100) 8 INTO Table1 ("column1", "column2") 9 VALUES ('REI2', 101) 10 INTO Table1 ("column1", "column2") 11 VALUES ('REI3', 102)
SQL
1CREATE TABLE Table2 2 ("column1" varchar2(4), "column2" varchar2(4), "column3" varchar2(10)) 3; 4 5INSERT ALL 6 INTO Table2 ("column1", "column2", "column3") 7 VALUES ('REI1', '100', 'ねこ') 8 INTO Table2 ("column1", "column2", "column3") 9 VALUES ('REI1', '101', 'かめ') 10 INTO Table2 ("column1", "column2", "column3") 11 VALUES ('REI2', NULL, 'いぬ') 12 INTO Table2 ("column1", "column2", "column3") 13 VALUES ('REI3', '200', 'とり') 14 INTO Table2 ("column1", "column2", "column3") 15 VALUES ('REI3', '300', 'へび')
######<Table1>
column1 | column2 |
---|---|
REI1 | 100 |
REI2 | 101 |
REI3 | 102 |
######<Table2>
column1 | column2 | column3 |
---|---|---|
REI1 | 100 | ねこ |
REI1 | 101 | かめ |
REI2 | null | いぬ |
REI3 | 200 | とり |
REI3 | 300 | へび |
######<ほしい結果>
column1 | column3 |
---|---|
REI1 | ねこ |
REI2 | いぬ |
REI3 | とり |
ほしい結果を、一回のSQLで得る方法はありますでしょうか。
①column1とcolumn2を結合項目にいれてINNER JOINします。
SQL
1(SELECT Table1.column1,column3 FROM Table1 INNER JOIN Table2 ON Table1.column1 = Table2.column1 AND Table1.column2 = Table2.column2)
①のSQLではREI2とREI3のcolumn3が取得できないので、
①で取得できなかった場合、
②REI2とREI3に関しては結合項目を列1のみにしたいです。またREI3については一件のみ取得したいです。
SQL
1(SELECT Table1.column1,min(column3) FROM Table1 INNER JOIN Table2 ON Table1.column1 = Table2.column1 GROUP BY Table1.column1 )
以上、SQLで求める結果を得たいのですが良い方法はありますでしょうか?
お手数ですが、ご回答いただければ幸いです。
試したこと
CASE式の中でSELECT文が使用できないか等試してみましたが当然できず、そもそもふつうのSQL文で動的に条件を変化させることはできるのでしょうか。
補足情報(FW/ツールのバージョンなど)
Oracle11gを使用しています。
回答1件
あなたの回答
tips
プレビュー