所以我在PostgreSQL数据库上设置了NodeJS + KnexJS,并使用.whereRaw()
方法,因此我可以在CASE
子句中使用WHERE
语句。
在迁移到代码之前,我在CLI中测试了该查询。这是正在使用的代码。
var qry = knex.select(....); // ignore the select, not important.
qry.with('daspecs', function(qy) {
qy.select('spec_id').from('drawings').where('uid', query.d);
}).whereRaw('CASE WHEN (select "spec_id" from "daspecs") IS NULL THEN true ELSE c.spec_id = (select "spec_id" from "daspecs") END');
KnexJS生成的SQL(使用qry.toString()
输出)是正确的,我甚至可以将其复制并粘贴到我的 psql CLI中,并返回我想要的结果(12条记录) ),但由于一些奇怪的原因,KnexJS查询似乎返回一组完全不同的结果(1106条记录)。
不知道下一步该去哪里,因为KnexJS给了我正确的SQL,但似乎它正在执行其他的东西,并且不确定如何诊断它实际上在做什么(我已经尝试过了) knex.on('query'...)
事件。
对最终SQL的任何更改都会导致错误(我已经过测试),因此排除了丢失的部分。
有没有人对KnexJS有任何经验或问题说过一件事,但特别是用whereRaw
命令做另一件事?