正如我已经发现的那样,可以通过执行类似的操作在一个查询中更新多行
update test as t set
column_a = c.column_a,
column_c = c.column_c
from (values
('123', 1, '---'),
('345', 2, '+++')
) as c(column_b, column_a, column_c)
where c.column_b = t.column_b;
特别感谢@Roman Pekar的明确回答。
现在,我正在尝试将这种更新与查询合并到NodeJS中的postgreSQL数据库中。
这是我的代码片段:
var requestData = [
{id: 1, value: 1234}
{id: 2, value: 5678}
{id: 3, value: 91011}
]
client.connect(function (err) {
if (err) throw err;
client.query(buildStatement(requestData), function (err, result) {
if (err) throw err;
res.json(result.rows);
client.end(function (err) {
if (err) throw err;
});
});
});
var buildStatement = function(requestData) {
var params = [];
var chunks = [];
for(var i = 0; i < requestData.length; i++) {
var row = requestData[i];
var valuesClause = [];
params.push(row.id);
valuesClause.push('$' + params.length);
params.push(row.value);
valuesClause.push('$' + params.length);
chunks.push('(' + valuesClause.join(', ') + ')');
}
return {
text: 'UPDATE fit_ratios as f set ratio_budget = c.ratio_budget from (VALUES ' + chunks.join(', ') + ') as c(ratio_label, ratio_budget) WHERE c.ratio_label = f.ratio_label', values: params
}
}
我没有收到错误,但是它不会更新我的表,我真的不知道这里出了什么问题。查询代码中可能存在语法错误?我只是在NodeJS
pg包中更新时找不到多行查询的任何特定示例
下面的示例基于pg-promise库及其方法helpers.update:
// library initialization, usually placed in its own module:
const pgp = require('pg-promise')({
capSQL: true // capitalize all generated SQL
});
const db = pgp(/*your connection details*/);
// records to be updated:
const updateData = [
{id: 1, value: 1234},
{id: 2, value: 5678},
{id: 3, value: 91011}
];
// declare your ColumnSet once, and then reuse it:
const cs = new pgp.helpers.ColumnSet(['?id', 'value'], {table: 'fit_ratios'});
// generating the update query where it is needed:
const update = pgp.helpers.update(updateData, cs) + ' WHERE v.id = t.id';
//=> UPDATE "fit_ratios" AS t SET "value"=v."value"
// FROM (VALUES(1,1234),(2,5678),(3,91011))
// AS v("id","value") WHERE v.id = t.id
// executing the query:
db.none(update)
.then(()=> {
// success;
})
.catch(error=> {
// error;
});
这种生成多行更新的方法可以表征为:
注意,我们?
在列的前面使用id
以指示该列是条件的一部分,但不进行更新。有关完整的列语法,请参见类Column和ColumnConfig结构。
我希望在一条语句中更新PostgreSQL中的多行。有没有一种方法可以做到以下几点?
问题内容: 正在运行。 下面给出的是我 巨大和丑陋 的样本 __ 我需要创建一个最终 结果 。 在执行上述操作时,出现以下错误。 我知道在做坏事。 希望您能从上述 查询中 了解要实现的目标。 因此,请提出其他替代方法。 非常感谢您的答复。 注意:实际查询 问题答案: 你不能那样做。 一个可以不引用PostgreSQL中CTE来看,由于热膨胀系数被物化。它们不仅是基础数据的视图。(有时确实很烦人,但
问题内容: 我正在尝试在postgres中执行以下操作: 但是,即使使用文档(http://www.postgresql.org/docs/9.0/static/sql- update.html )中提到的postgres 9.0,也无法实现第1点 同样,第二点似乎不起作用。我收到以下错误:子查询必须仅返回一列。 希望有人对我有解决方法。否则查询将花费大量时间:(。 仅供参考:我正在尝试从几张表中
我想在一条语句中更新PostgreSQL和Go中的多行。有没有办法做如下事情? 还有有没有一个例子,如果用go语言执行?
问题内容: 我是Postgresql的新手,正在使用9.3版。我有一张桌子,里面有几行。我的问题是,当我更新一行时,该行号被更改并将其移动到表中的最后一个位置。我的问题是:这是否是默认行为,因为我认为在更新行时,不应将其从其位置移开?该操作似乎就像先删除然后再插入该行。 这是示例SQL: 从今起: 将ID为1的更新后的行移动到最后一个位置。 谢谢 问题答案: 行号已更改 关系表中没有“行号”之类的
问题内容: 考虑2个或更多表: 我希望删除所有与名字“ Sam ”匹配的 用户 及其 订单 。在mysql中,我通常会做左连接。在此示例中,我们不知道userid。 查询的正确格式是什么? 问题答案: http://www.postgresql.org/docs/current/static/sql- delete.html 您也可以使用 http://www.postgresql.org/doc