2017-05-22 23 views
1

私は3つの列cola、colb、colcを持つテーブルを持っていますが、正の整数(NULLでも構いません)を含んでいます。 cola、colb、またはcolcがnullでない場合にINSERT INTOを新しいテーブルにしたいと思います。そのような方法でNULLがない場合、3つの新しいエントリが挿入され、2つだけ対応する2つの新しいエントリ。複数の条件postgresql 9.5

この構文は働いているが、私は何をする可能簡単な方法を探しています:

INSERT INTO new_table select 'cola' where table.cola > 0; 
INSERT INTO new_table select 'colb' where table.colb > 0; 
INSERT INTO new_table select 'colc' where table.colc > 0; 

任意のアイデア? おかげ

+0

は、あなたがすべてのコーラ、COLB、またはCOLC値、彼らはされていないNULL NEWTABLEに挿入する必要がありますか? –

+0

@OtoShavadzeはい、私たちがお互いを正しく理解すれば、それはそうです。 :) –

答えて

1

あなたは(UNIONを使用して)複数の行を選択し、1 INSERT INTOにそれらを追加することができますので、

INSERT INTO 
    new_table (
     SELECT 'cola' WHERE table.cola > 0 
     UNION ALL 
     SELECT 'colb' WHERE table.colb > 0 
     UNION ALL 
     SELECT 'colc' WHERE table.colc > 0 
    ); 
+0

「UNION ALL」ではなく「UNION」がなぜですか? UNIONは重複した値を削除します。 –

+1

@OtoShavadzeあなたが正しいです - 'UNION ALL'はより良い選択であり、より高速です。私は私の答えを編集しました、これを指摘してくれてありがとう。 – Adam