2017-07-12 11 views
0

END ASとともに作成された結果カラムから既存のIDカラムとともに新しいテーブルを作成しようとしています。私のクエリの結果は、最初のテーブルにあります。私は2番目のような新しいテーブルを作成したい。私はSELECT INTOをさまざまな方法で使用しようとしましたが、結果から新しいテーブルを作成することさえできません。使用している[DBMS](https://en.wikipedia.org/wiki/DBMS)新しいテーブルを作成するために、CASESとJOINと共にSELECT INTOを実行します。

SELECT table1."id", table1.val, table2.val, 
CASE WHEN table2.val IS NOT null AND table2.val != 'N' THEN table2.val 
    WHEN table2.val = 'N' THEN null 
    WHEN table1.val = 'N' THEN null 
ELSE table1.val 
END AS results 
FROM table1 
LEFT JOIN table2 ON table2."id" = table1."id" 

+----+-----+--------+---------+ 
| id | val | val | results | 
+----+-----+--------+---------+ 
| 1 | A | N  | [null] | 
| 2 | A | B  | B  | 
| 3 | N | [null] | [null] | 
| 5 | A | [null] | A  | 
| 8 | A | B  | B  | 
| 9 | N | B  | B  | 
| 10 | N | N  | [null] | 
+----+-----+--------+---------+ 

+----+---------+ 
| id | results | 
+----+---------+ 
| 1 | [null] | 
| 2 | B  | 
| 3 | [null] | 
| 5 | A  | 
| 8 | B  | 
| 9 | B  | 
| 10 | [null] | 
+----+---------+ 
+0

?標準SQL( 'sql'タグが参照する)では、selectに基づく新しいテーブルは、' select .. into'ではなく 'create table ... as select ...'を使って作成されます。 –

+0

pgAdmin。カピルの答えは、私が探していたことです。ありがとうございました。 – Kertigen

+0

pgAdminはDBMSではありません。しかし、Postgresデータベースにしか接続できないので、Postgresを使用していると仮定すると安全です。 –

答えて

0
SELECT table1."id", 
CASE WHEN table2.val IS NOT null AND table2.val != 'N' THEN table2.val 
WHEN table2.val = 'N' THEN null 
WHEN table1.val = 'N' THEN null 
ELSE table1.val 
END AS results INTO New_Table 
FROM table1 
LEFT JOIN table2 ON table2."id" = table1."id" 
+0

@kertigen: 'select into'を使って新しいテーブルを作成するのは、Postgresでお勧めできません。標準の 'create table as'を使うのが良いです。https://www.postgresql.org/docs/current/static/sql-createtableas.html –

+0

ありがとう。私はそれを試してみる。それはほとんどのDBMSで動作するのでしょうか、それともPostgresの方がいいですか? – Kertigen

関連する問題