Mysql 如何使用';和';与';在';knex中的连接条件

Mysql 如何使用';和';与';在';knex中的连接条件,mysql,knex.js,Mysql,Knex.js,我正在尝试生成如下查询: 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

我正在尝试生成如下查询:

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”视为列。 在这种情况下,我如何应用“和”条件

var query = knex().from('tab1').join('tab2', function() {
   this.on('tab1.id', '=', 'tab2.id')
   .on('tab2.code', '=', knex.raw('?', ['someValue']))
}, 'left')
.column([knex.raw('IFNULL(tab1.name, "no name") as name')]);
使用knex.raw将someValue引用为string实现了这一点。
希望这对某人有所帮助。

我不得不使用
knex.raw('?',['someValue'])
而不是
knex.raw('someValue')

对于我(使用Knex 0.13.0)接受的解决方案
.on('tab2.code','=',knex.raw('someValue')
已生成查询:
tab2.code=someValue
不带引号) 这导致出现
未知列someValue
错误


使用
.on('tab2.code','=',knex.raw('?',['someValue'])
生成了预期的
tab2.code='someValue'
带引号)将
tab2.code
与字符串文字而不是列进行比较。

没有很好的文档,但现在可以使用
onVal
,以及它的任何和/或变体

因此,与其

.on('tab2.code', '=', knex.raw('?', ['someValue']))
你可以简单地写:

const query = knex()
  .from('tab1')
  .join('tab2', function() {
     this.on('tab1.id', '=', 'tab2.id')
     this.andOnVal('tab2.code', '=', 'someValue')
}, 'left')
.column([knex.raw('IFNULL(tab1.name, "no name") as name')]);

玛安,救了我一个晚上;-)谢谢!我在文件上找不到它。非常感谢。你怎么知道的?您阅读了他们的源代码,不是吗?主要是knex的包装器,这些助手方法直接来自knex。在0.16.1中添加:
添加了onVal和相关的not/and/or方法
我的建议是查看knex文档以了解其他方法。他们很可能也会提出异议。