我想在OrmLite中表达以下SQL-Query:
SELECT * FROM table WHERE NOT (number1 = 0 AND number2 = 0)
这里的问题是在非操作中包装和AND条件。
我的第一个假设是写:
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).
有人可以采用另一种方式来构建查询吗?
答案 0 :(得分:0)
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);