java – Querydsl / MySQL上的Count(*)(星号)?
发布时间:2020-12-15 04:23:46 所属栏目:Java 来源:网络整理
导读:最初的功能 MySQL查询,列出所有列出标签的所有提供商: SELECT * FROM provider INNER JOIN provider_tag ON provider_tag.provider_id = provider.id AND provider_tag.tag_id in (1,2) GROUP BY (provider.id) HAVING COUNT(*) = 2 在Querydsl中转换为MySQ
最初的功能
MySQL查询,列出所有列出标签的所有提供商:
SELECT * FROM provider INNER JOIN provider_tag ON provider_tag.provider_id = provider.id AND provider_tag.tag_id in (1,2) GROUP BY (provider.id) HAVING COUNT(*) = 2 在Querydsl中转换为MySQLQuery非常简单…… MySQLQuery query = new MySQLQuery(conn,dialect); List<Integer> tagIds = ...; query.from(provider) .innerJoin(provider_tag) .on(providerTag.providerId.eq(provider.id),providerTag.tagId.in(tagIds)) .groupBy(provider.id) .having(???); ……除了有条件. 如何在查询中添加COUNT(*)? 在蒂莫的第一次修正提案后编辑: 所以,查询看起来像这样: SearchResults<Tuple> result = query.from(provider) .innerJoin(providerTag) .on(providerTag.providerId.eq(provider.id),providerTag.tagId.in(tagIds)) .groupBy(provider.id) .having(Wildcard.count.eq((long) tagIds.size())) .listResults( provider.id,provider.name); 但是,如果结果集为空,则会对空结果集导致SQLException非法操作. 我的其他返回空结果集的查询不会导致异常,所以我想我不应该捕获异常,但是有一个问题需要修复? 生成的MySQL工作正常(返回0行),所以问题不存在. 编辑2: 问题出在groupBy()中.如果应用issue中显示的校正,这似乎有效. 解决方法
COUNT(*)的querydsl等价物是Wildcard.count.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |