2016-12-09 9 views
1

私はnode.jsとmysqlを使用しています。 1つのクエリで複数の行を挿入しようとしていますが、その主キーを持つ行がすでに存在する場合は更新してください。重複キーを挿入する複数の行を一度に更新する

PKはexchange + currency1 + currency2です。

ただし、1行だけが挿入されます(5つではなく)。ここで

は私valuesArrayです:

[ [ 4, 'BTC', 'IDR', 10440000, 10391000 ], 
    [ 4, 'BTC', 'MYR', 2380, 2095 ], 
    [ 4, 'BTC', 'ZAR', 11216, 11201 ], 
    [ 4, 'BTC', 'SGD', 1100, 1093 ], 
    [ 4, 'BTC', 'NGN', 403500, 402701 ] ] 

、ここでは私のクエリです:

connection.query("INSERT INTO rates (exchange,currency1,currency2,buyrate,sellrate) VALUES(?) ON DUPLICATE KEY UPDATE buyrate=VALUES(buyrate), sellrate=VALUES(sellrate)", valuesArray, function (err) { 
    }); 

私は(ちょうど数値配列の周りに[]を追加)これに私のクエリを変更しようとしました:

connection.query("INSERT INTO rates (exchange,currency1,currency2,buyrate,sellrate) VALUES(?) ON DUPLICATE KEY UPDATE buyrate=VALUES(buyrate), sellrate=VALUES(sellrate)", [valuesArray], function (err) { 
     }); 

このエラーが発生する:

{ [Error: ER_OPERAND_COLUMNS: Operand should contain 1 column(s)] 
    code: 'ER_OPERAND_COLUMNS', 
    errno: 1241, 
    sqlState: '21000', 
    index: 0 } 
+0

どの行が挿入されますか? – Kryten

+0

@Kryten最初のもの – kecman

+1

'... VALUES? ON DUPLICATE ... '(角カッコなし)と' [valuesArray] '(角カッコ付き)です。 – Solarflare

答えて

0

answer by @Solarflare:

使用...VALUES ? ON DUPLICATE...(括弧なし)と(括弧付き)[valuesArray]