2016-08-31 13 views
1

同じテーブルの1つの新しい列に列を結合する方法に関する基本的なヘルプが必要でした。私はSELECTコマンドとして以下のことを行っており、正常に動作します。私はそれをテーブルに永久に追加する方法を知らないので、テーブルの一部になります。同じテーブルの結合された列を使用してテーブルに列を追加する方法は?

SELECT *, concat(z41, z42, z43, z44) AS option_3, 
concat(z411, z412, z413, z421, z422, z423, z431, z432, z433, z434, z444,z443, z442, z441) AS option_4, 
concat(z4211, z4212, z4213, z4214, z4215, z4311, z4312, z4313, z4314, z4431, z4432, z4433, z4434, z4421, z4422, z4423, z4424, z4425, z4426) AS option_5 
FROM combined_full 
+2

ビューを使用してビューに式を追加することをお勧めします。 –

答えて

0

他の人が触れたように、あなたはおそらくビューを使う方がよいでしょう。あなたが本当に列で、この計算されたデータが必要な場合しかし、あなたはこれを行うことができます。

ALTER TABLE combined_full ADD COLUMN option_3 varchar, 
          ADD COLUMN option_4 varchar, 
          ADD COLUMN option_5 varchar; 

UPDATE combined_full 
SET option_3 = concat(z41, z42, z43, z44), 
    option_4 = concat(z411, z412, z413, z421, z422, z423, z431, z432, z433, z434, z444,z443, z442, z441), 
    option_5 = concat(z4211, z4212, z4213, z4214, z4215, z4311, z4312, z4313, z4314, z4431, z4432, z4433, z4434, z4421, z4422, z4423, z4424, z4425, z4426); 

テーブルに新しい行を追加する場合、あなたはどちらかもこれら三つの新しい列の値を入力するか、挿入トリガーを作成する必要があります上記のように値が自動的に計算されます。

+0

完璧!..ありがとうパトリックは大いに感謝しました、これは本当に私を迷惑にしていました。 – Ary

+0

@Ary:**これらの値を最新の状態に保つためにトリガーが必要になることに注意してください。 –

+0

私もそれを念頭に置いています。一般に私が現在更新していないデータを言います。将来の使用のために非常に高く評価されています。 – Ary

0

ので、それはテーブルの一部になること」 - あなたがすることはできません。残念ながら、Postgres(9.6現在)には(永続的な)計算カラムはありません。

もし計算式が非常に高価ではなく、インデックスを必要としない場合は、式を含むビューを作成することをお勧めします。

あなたの質問にある例を考えれば、連結値が本当に高価ではないので、これはあなたのケースでは十分であるはずです。

実際に式の計算を維持する必要があると思われる場合は、その上にインデックスを作成するか、またはwhere句で常にその式を使用する場合は、テーブルに通常の列を追加し、行が挿入または更新されたときに式を更新するトリガーを追加する必要があります。

+0

列内のデータはワードであり、ギャップが存在する。 z41は空、z42はempy、z43はempy、z44は '決してありません'。あなたは「Never been」としか言わない1つの列になるようにそれらを組み合わせることができますか?もしこれが助けられたら、私は知らなかった。 – Ary

+0

@Ary:それはまったく別の質問です。しかし、 'concat()'はそれを行うでしょう –

関連する問題