如何在Sugar ORM中使用INTERSECT查询?能否执行指定SQL语句?
在Sugar ORM中执行带INTERSECT的SQL查询
首先先确认下你用来获取同时拥有标签ID 1和5的产品的SQL语句:
Select PRODUCT from PRODUCT_TAGS where TAGS = 1 intersect Select PRODUCT from PRODUCT_TAGS where TAGS = 5
没问题的!你完全可以在Sugar ORM中执行这条查询,主要有两种方式可以实现:
1. 直接执行原生SQL语句
Sugar ORM本身支持原生SQL查询,你可以用SugarRecord.findWithQuery()方法直接传入这条完整的SQL语句。举个代码示例(假设你的实体类对应ProductTags):
// 执行原生INTERSECT查询 List<ProductTags> targetProducts = SugarRecord.findWithQuery(ProductTags.class, "Select PRODUCT from PRODUCT_TAGS where TAGS = 1 intersect Select PRODUCT from PRODUCT_TAGS where TAGS = 5");
注意:如果你的目标实体是Product而不是ProductTags,只需要把第一个参数换成Product.class即可,同时要确保查询返回的字段和实体类的属性匹配。如果只需要PRODUCT字段的具体值,也可以对查询结果做进一步提取。
2. 用分组查询替代INTERSECT(可选方案)
如果你想避免直接用原生INTERSECT语法,也可以通过分组+Having条件达到同样效果,这种方式也能在Sugar ORM中用QueryBuilder实现:
原生SQL版
SELECT PRODUCT FROM PRODUCT_TAGS WHERE TAGS IN (1,5) GROUP BY PRODUCT HAVING COUNT(DISTINCT TAGS) = 2
Sugar ORM QueryBuilder实现
QueryBuilder<ProductTags> queryBuilder = ProductTags.queryBuilder(); List<ProductTags> targetProducts = queryBuilder.select("PRODUCT") .where(Condition.prop("TAGS").in(1, 5)) .groupBy("PRODUCT") .having("COUNT(DISTINCT TAGS) = ?", 2) .list();
两种方式都能帮你拿到想要的结果,选哪种就看你个人的代码风格偏好啦。
内容的提问来源于stack exchange,提问作者Ema_wat
相关产品推荐
相关产品推荐

