0

下面的代码给出了一个错误

List<List<Consumption>> children = new ArrayList<List<Consumption>>();
try {
    for(DrinkType drinkType : groups){
        QueryBuilder<Consumption, ?> qb = getHelper()
                .getConsumptionDao().queryBuilder();
        qb.groupBy(Consumption.COLUMN_DRINK_ID).having("MIN("+Consumption.COLUMN_PRICE+")").orderBy(Consumption.COLUMN_PRICE, true);
        QueryBuilder<Drink, Integer> qb2 = getHelper().getDrinkDao().queryBuilder();
        qb2.where().eq(Drink.COLUMN_DRINKTYPE, drinkType.getFlag());
        qb.join(qb2);
        Log.d("Query", qb.prepareStatementString());
        children.add(qb.query());   
    }

} catch (SQLException e) {
    e.printStackTrace();
}

似乎 QueryBuilder 将 HAVING 子句放在 ORDER BY 子句后面而不是前面。

java.sql.SQLException: Problems executing Android query: 
SELECT `consumption`.* FROM `consumption` INNER JOIN `drink` ON
 `consumption`.`drink_id` = `drink`.`_id` WHERE `drink`.`drink_type` = 'P'
 GROUP BY `consumption`.`drink_id` ORDER BY `consumption`.`price` HAVING MIN(price) 

我尝试通过执行原始查询来解决此问题,但是如果我使用以下查询

SELECT co.* FROM consumption co INNER JOIN drink dr ON dr._id = co.drink_id
 WHERE dr.drink_type = 'P' GROUP BY co.drink_id HAVING MIN(price) ORDER BY price

与我使用 SQLite Manager 直接在我的 sqlite 数据库上执行相同的查询相比,这会返回不同的结果。我认为在同一个查询中同时使用 HAVING 和 ORDER BY 时,ORMlite 可能会出现问题。

是否有可能的解决方法,以便我可以让这个查询工作?

4

0 回答 0