テーブルレイアウトの例を次に示します。postgresqlでknexを使って複数の行を条件付きで更新するには?
CREATE TABLE test (id1 int, id2 int, auth boolean);
INSERT INTO test VALUES (1, 1, true);
私は次のクエリをknex.jsフレームワークに変換しようとしています。ここで
UPDATE test as t
SET auth = c.auth
from (values (1, 1, false),(2, 1, false))
as c(id1, id2, auth)
where c.id1 = t.id1 AND c.id2 = t.id2;
select * from test
はフィドルです:私は周りを見回して、次のリソースを見つけたhttp://sqlfiddle.com/#!17/62529/8
:github issue、update multiple queries (no conditional)
をこれらのメソッドを実装しようとした後、私はまだ失敗したアップ来ていますどこが間違っているのかわからない。
私は次のように、knex.rawステートメントに私の元Postgresのクエリをラップすることによって、クエリをブルートフォースしようとしました:
return knex.raw('' +
'UPDATE test as t ' +
'SET auth = c.auth ' +
'from (values (1, 1, false),(2, 1, false))' +
'as c(id1, id2, auth)' +
'where c.id1 = t.id1 AND c.id2 = t.id2;')
がどのエラーを思い付くsyntax error on or near « as »
また、私はしましたgithubの問題のアドバイスに従ってみました。
let string = knex
.into('test t')
.update('auth, c.auth')
.values('(1, 1, false), (2, 1, false)')
.where(knex.raw('c.id1 = t.id1 AND c.id2 = t.id2'))
.toString()
knex.raw(string)
エラー「値」を返すのは関数ではありません。
私はknexとpostgresの両方に新しいので、痛いほど明白な何かが欠けているかどうかはわかりません!どんな助けも大歓迎です。 false))as
で「と」のfalse)) as
になるために前にスペースを必要とするかもしれないように見える生のバージョンで