次のスキーマが与えられた場合 (例として)
CREATE TABLE "test" (
"id" int,
"title" varchar
);
NodeJSでは、次のようにUPDATEを試みます
client.query(
'WITH new_vals ("id","title") AS (VALUES($1,$2)) ' +
'UPDATE "test" "t" SET "id"=nv.id, "title"=nv.title ' +
'FROM new_vals nv ' +
'WHERE "t"."id"=nv.id;',
[1,'test'],
function(err, res){ ... }
);
そして、次のエラーが表示されます: 「エラー: 演算子が存在しません: 整数 = テキスト」
"t"."id"=nv.id
では、使用をやめて、使用可能なパラメーターの 1 つだけを再利用してみましょう。
client.query(
'WITH new_vals ("id","title") AS (VALUES($1,$2)) ' +
'UPDATE "test" "t" SET "id"=nv.id, "title"=nv.title ' +
'FROM new_vals nv ' +
'WHERE "t"."id"=$1;',
[1,'test'],
function(err, res){ ... }
);
まだ'エラー: 演算子が存在しません: 整数 = テキスト' .
$3
では、別のプレースホルダーを追加しましょう。
client.query(
'WITH new_vals ("id","title") AS (VALUES($1,$2)) ' +
'UPDATE "test" "t" SET "id"=nv.id, "title"=nv.title ' +
'FROM new_vals nv ' +
'WHERE "t"."id"=$3;',
[1,'test',1],
function(err, res){ ... }
);
別のエラー: 「エラー: 列 "id" は整数型ですが、式はテキスト型です」
私は完全に迷っています。int
WHERE で演算子クラスを使用しないのはなぜですか? ここで何が問題なのですか?
奇妙なUPDATE
ことに、句のない標準形はWITH
うまく機能します...
遊ぶためのコードが必要な場合: https://gist.github.com/kolypto/7455957