我正在尝试生成如下查询:
select ifnull(t1.name, ‘default’) as name
from tab1 as t1
left join tab2 as t2
on t1.id=t2.id and t2.code=“someValue”
我在诺克斯写的:
var query = knex().from(’tab1’).join(’tab2', function() {
this.on('tab1.id', '=', 'tab2.id').andOn('tab2.code', '=', 'someValue')
},
‘left')
.column([
knex.raw(‘IFNULL(tab1.name, "no name") as name')
]);
这不会执行,因为它将“someValue”视为列。在这种情况下如何应用“and”条件?
4条答案
按热度按时间e5njpo681#
sz81bmfz2#
使用knex.raw将someValue作为字符串引用就可以了,希望这对大家有所帮助。
1rhkuytd3#
没有很好的文档,但是现在可以使用
onVal
及其任何和/或变体。所以与其说
你可以简单地写:
e1xvtsh34#
我不得不使用
knex.raw('?', ['someValue'])
而不是knex.raw('someValue')
。对于我(使用Knex 0.13.0),可接受的解决方案
.on('tab2.code', '=', knex.raw('someValue')
生成查询:tab2.code = someValue
(不带引号),然后导致Unknown column someValue
错误。使用
.on('tab2.code', '=', knex.raw('?', ['someValue']))
将tab2.code
与字符串文字而不是列进行比较,生成预期的tab2.code = 'someValue'
(带引号)。