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

unnestを使用したpostgreSQLの一括更新

    unnestを呼び出しています FROMで3回 句、つまりCROSS JOINを実行していることを意味します 3の(デカルト積)。

    PostgreSQL 9.4以降を使用している場合は、unnestを1回呼び出すだけです。 各配列を入力として与える:

    select * from 
             unnest(
                array['2001622', '2001624', '2007903'],
                 array[15,14,8],
                 array['type1', 'type1', 'type1'],
                 array[false, true, true]
            ) as u(id, ver, type, enabled)
    

    別のオプションは、どのバージョンでも、呼び出しをunnestに追加することです。 SELECTFROMの代わりに :

    select
       unnest(array['2001622', '2001624', '2007903']) as id,
       unnest(array[15,14,8]) as ver,
       unnest(array['type1', 'type1', 'type1']) as type,
       unnest(array[false, true, true]) as enabled
    

    どちらの場合も、特に最後の場合は、各配列にまったく同じ数の要素があることを確認する必要があります。最初のメソッドにない場合、欠落している各行はNULLとして埋められますが、2番目のメソッドでは、 LCM それぞれによって返される行数のうち、おそらく望ましくないものです。例:

    SELECT * FROM unnest(array[1,2,3,4], array['a','b','c','d','e','f']);
     unnest | unnest 
    --------+--------
          1 | a
          2 | b
          3 | c
          4 | d
     [null] | e
     [null] | f
    (6 rows)
    
    SELECT unnest(array[1,2,3,4]), unnest(array['a','b','c','d','e','f']);
     unnest | unnest 
    --------+--------
          1 | a
          2 | b
          3 | c
          4 | d
          1 | e
          2 | f
          3 | a
          4 | b
          1 | c
          2 | d
          3 | e
          4 | f
    (12 rows)
    

    テーブル関数呼び出し 詳細については。



    1. Highcharts非同期サーバーの複数のシリーズの読み込み

    2. 結果を日付で並べ替えてグループ化

    3. R12.2で管理サーバーを追加する方法

    4. QMYSQLドライバーがQT5.2にロードされないのはなぜですか?