使用knexjs,如何比较.where()函数中的两列?

时间:2016-05-25 20:47:05

标签: javascript knex.js

仅使用knexjs(没有书架)我想做类似以下查询的事情:

.table("table1").select().where("column1", "<", "column2")

然而,当我这样做时:

select * from table1 where column1 < 'column2'

knexjs生成的SQL是:

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
  TestFeatureLogin.class,
  TestFeatureLogout.class,
  TestFeatureNavigate.class,
  TestFeatureUpdate.class
})

/**
 * 
 * This suite will execute TestFeatureLogin,TestFeatureLogout,TestFeatureNavigate and TestFeatureUpdate one after the over.
 * 
 * @Before, @After and @Test are no possible of executing in this class.
 * @BeforeClas and @AfterClass are allowed only.  
 * 
 * */
public class FeatureTestSuite {
    // the class remains empty of test,although it is possible set up a before class and after class annotations.
    // used only as a holder for the above annotations

    @BeforeClass
    static public void beforeClass(){
        System.out.println(FeatureTestSuite.class.toString() + " BeforeClass Method");
    }

    @AfterClass
    static public void AfterClass(){
        System.out.println(FeatureTestSuite.class.toString() + " AfterClass Method");
    }   
}

没有给出所需的结果b / c它没有比较列中的值,而是比较字符串的值,第2列&#39;。

任何人都知道如何做我想要的事情?谢谢!

2 个答案:

答案 0 :(得分:14)

好的,经过一番挖掘后,看起来它可以用这个方式完成。不确定这是否是最佳做法,但此刻,它一直有效,直到我听到其他情况......

.table("table1").select().where("column1", "<", knex.raw("table1.column2"))

同样,不理想,但它完成了工作。请务必

import knex from "knex";

在您使用此文件的任何文件的顶部。

答案 1 :(得分:1)

从knex 0.15.0(2018年7月)开始,我们有了:

table("table1").select().where("column1", "<", knex.ref("column2"))

请参见https://knexjs.org/#Ref

正如Greg Hornby在对其他答案的评论中提到的那样,您还可以在原始查询中使用??来绑定到列或表名。