加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读