java – Querydsl / MySQL上的Count(*)(星号)?
作者:互联网
最初的功能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.
标签:querydsl,java,mysql 来源: https://codeday.me/bug/20190728/1560594.html