sql >> データベース >  >> RDS >> PostgreSQL

配列から一意でない値を1つ削除します

    あなたが見つけてうまく利用したdba.SEに関する私の古い答えに基づく:

    あなたはそれをさらに一歩進めるかもしれません:

    CREATE OR REPLACE FUNCTION f_array_remove_elem1(anyarray, anyelement)
      RETURNS anyarray LANGUAGE sql IMMUTABLE AS
    'SELECT $1[:idx-1] || $1[idx+1:] FROM array_position($1, $2) idx';
    

    この関数は、削除する要素の値を2番目のパラメーターとして受け取ります。多形疑似タイプanyelementの使用 したがって、これを任意の配列タイプで機能させることができます。

    次に、UPDATE 単純に:

    UPDATE test_table
    SET    test_array = f_array_remove_elem1(test_array, 'B')
    WHERE  id = 1;
    

    db <> fiddle こちら

    元の関数f_array_remove_elem()を使用している間 要素値の代わりにインデックス位置を取得する場合、サブクエリなしで実行できます:

    UPDATE test_table
    SET    test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
    WHERE  id = 1;
    

    新しい関数よりも少し速いかもしれません。
    そして、古い回答の下部にある単純なバージョンがPostgres9.6で機能することに注意してください。



    1. クエリ実行のステートメントタイムアウトを設定する方法

    2. VBAでのSQLクエリ出力はSQLOracleとは異なります

    3. MySQLのPHPでパスからの画像を表示する

    4. MySQL結合-別のテーブルPHPを介した結果の順序付け