【问题标题】:Count(*) (asterisk) on Querydsl / MySQL?Querydsl / MySQL上的计数(*)(星号)?
【发布时间】:2014-11-22 09:22:27
【问题描述】:

原始功能 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(???);

...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 Illegal operation on empty result set

我的其他返回空结果集的查询不会导致异常,所以我想我应该不需要捕获异常,但是有一个问题应该修复?

生成的 MySQL 运行良好(返回 0 行),所以问题不存在。

编辑 2

问题出在groupBy()。如果应用issue 中显示的更正,这似乎可行。

【问题讨论】:

    标签: java mysql querydsl


    【解决方案1】:

    COUNT(*) 的 querydsl 等效项是 Wildcard.count

    【讨论】:

    • 我收到空结果集的异常,请参阅原始问题中的编辑。
    猜你喜欢
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多