2016-03-23 3 views
1

クエリにある配列フィールドからエントリを削除しようとしています。ポストグル配列からオーバーラップエントリを削除する

tablename.listfield :: integer []には完全なリストがあります このフィールドから値のリストを削除しようとしていますが、これは更新クエリ内で収集されています。 ARRAY_REMOVEメソッドは単一値のみを受け入れ、int[] - int[]のintarrayモジュールはオプションではないようです。

重なりがある場合ARRAY[] && ARRAY[]はリターンをブールすることができますが、それは私が必要なものを基本的に

に私を助けていませんが、私は動作しません知っている、この概念の実際の作業バージョンです。

UDPATE tablename SET listfield = ARRAY_REMOVE(listfield, (select id from othertable))

これは多分トリッキーなCTEの設定か何かで行わ得るためにそれは可能ですか?

ありがとうございました!それだけで正常に動作しますので

答えて

1

私は、あなたがintarrayはオプションではないよう言う理由はわからない:

... SET listfield = listfield - (SELECT array_agg(id) FROM othertable) 

をしかし、あなたは拡張子をインストールせずにこれを実行したい場合は、UNNESTをすることができます配列EXCEPTの構造を使用してください:

... SET listfield = ARRAY(SELECT UNNEST(listfield) EXCEPT SELECT id FROM othertable) 
+0

素晴らしい感謝!うまくいくように見える –

関連する問題