gpt4 book ai didi

postgresql - 如何使用 knex 和 postgresql 有条件地更新多行?

转载 作者:行者123 更新时间:2023-11-29 12:41:37 26 4
gpt4 key购买 nike

这是表格布局的示例;

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

这是一个 fiddle :http://sqlfiddle.com/#!17/62529/8

我环顾四周,找到了以下资源:github issue , update multiple queries (no conditional)

在尝试实现这些方法之后,我仍然没有成功,我不确定我哪里出错了。

我试图通过将我原来的 postgres 查询包装到 knex.raw 语句中来强行查询,例如:

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 处的“as”之前留一个空格,才能变成 false))as...

我通过添加 .on('query-error', 看到了这一点,如下所示。使用此信息,您应该能够确定它是 SQL 引擎错误还是 Knex 错误,并且如果 SQL 是按照您的需要生成的。

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;')
.on('query-error', function(ex, obj) {
console.log("KNEX query-error ex:", ex, "obj:", obj);
}).then(function(retVal) {
console.log("Query ran okay.");
return retVal;
});

还有 .on('query', 将为您提供有关查询的信息,以帮助您正确完成查询。请参阅:http://knexjs.org/#Interfaces-query

问候,加里。

关于postgresql - 如何使用 knex 和 postgresql 有条件地更新多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47336087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com