複数の行を挿入または更新するための純粋なSQLクエリが必要です。私は1つの作業を始めたが、単一の行のために:複数の行に挿入しない場合の結合更新
WITH UPDATED_ITEMS as (
UPDATE table SET (columnC, columnD) = ($value3, $value4) WHERE id = $value5 returning *
)
INSERT INTO table (columnA, columnB, columnC, columnD) SELECT $value1, $value2, $value3, $value4 WHERE NOT EXISTS (SELECT * FROM updated_items)
今私は、更新条件を変更しているが、挿入でそれを行う方法がわからない:
WITH updated_items as (
UPDATE table as m SET
columnC = c.columnC
columnD = c.columnD
from (values ($value3, $value4, $value5), ($value8, $value9, $value10)
) as c(columnC, columnD, id)
where c.id::int4 = m.id returning *
)
INSERT INTO table (columnA, columnB, columnC, columnD)
SELECT ($value1, $value2, $value3, $value4, $value5), ($value6, $value7, $value8, $value9, $value10) WHERE NOT EXISTS (SELECT * FROM updated_items)
しかし、挿入部動作しません。誰でも助けてください?
代わりに 'insert on conflict'を使わないのはなぜですか? –
矛盾している列がシリアルのIDであれば使用できますか? – mjarmoc