次のコードはエラーになります
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 に問題が発生する可能性があると思います。
このクエリを機能させるための回避策はありますか?