【问题标题】:OrmLite: Building WHERE NOT around AND/OR conditionOrmLite:在 AND/OR 条件之外构建
【发布时间】:2015-04-12 10:38:35
【问题描述】:

我想在 OrmLite 中表达以下 SQL-Query:

SELECT * FROM table WHERE NOT (number1 = 0 AND number2 = 0)

这里的问题是在非操作中包装和与条件。

  • 我的第一个假设是写:

    queryBuilder().
       where().not()
          .eq("number1", 0)
          .and()
          .eq("number2", 0);
    

    结果:

    SELECT * FROM table WHERE ((NOT number1 = 0 ) AND number2 = 0)
    
  • 下一个方法:

    queryBuilder().
       where().not()
          .eq("number1", 0)
          .and().not()
          .eq("number2", 0);
    

    结果:

    SELECT * FROM table WHERE ((NOT number1 = 0 ) AND (NOT number2 = 0) )
    
  • 我终于尝试了:

    queryBuilder.where()
       .not(
          where.eq(DbProperties.COLUMN_NAME_GROUP_ID, item.groupId)
             .and().eq(DbProperties.COLUMN_NAME_TASK_ID, item.taskId)
       );
    

    结果:

    IllegalArgumentException: NOT operation can only work with comparison SQL clauses
    

我也知道方法

and(int numClause) 
or(int numClause)

但OrmLite不提供

not(int numClause).

有人可以假设另一种方式来构建查询吗?

【问题讨论】:

    标签: java android sql ormlite


    【解决方案1】:
    SELECT * FROM table WHERE NOT (number1 = 0 AND number2 = 0)
    

    等价于

    SELECT * FROM table WHERE ((NOT number1 = 0 ) OR (NOT number2 = 0) )  
    

    其中,重新排列您的上一个查询将是:

    queryBuilder().
       where()
          .not().eq("number1", 0)
          .or()
          .not().eq("number2", 0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      相关资源
      最近更新 更多