NHibernate HQL - выберите количество (*) с наличием - не можете заставить его работать - PullRequest
1 голос
/ 07 октября 2010

Попытка запустить следующий HQL с помощью NHibernate:

select count(distinct t) as TweetCount
from Tweet t
    join t.Tweeter u
    left join t.Votes v
    left join t.Tags tag
where t.App = :app
having count(distinct v) > 0

Но по какой-то причине предложение hasing игнорируется и подсчитывает все твиты, когда только 2 твита имеют голос.Я просто хочу подсчитать количество твитов, которые имеют хотя бы один голос.

Вот моя база данных My Twitter database

Я попытался добавить группу в свой запрос следующим образом:

select count(distinct t) as TweetCount
from Tweet t
    join t.Tweeter u
    left join t.Votes v
    left join t.Tags tag
where t.App = :app
group by t
having count(distinct v) > 0

... но в итоге он возвращает коллекцию, содержащую 2 целых числа, каждое из которых имеет значение 1 вместо уникального результата.

1 Ответ

3 голосов
/ 07 октября 2010

это будет соответствовать счету

select count(distinct t.Id) as TweetCount
from Tweet t
    inner join t.Votes v
where t.App = :app

, поскольку мы внутренне присоединяемся к таблице голосов, любой твит, у которого нет голосов, не будет учитываться в наборе результатов.

Другой способиспользование чистого синтаксиса HQL будет

select count(distinct t.Id) as TweetCount
from Tweet t
where t.App = :app and size(t.Votes) > 0

, что создаст оператор SQL в зависимости от вашего диалекта, функция size () зависит от hql для коллекций, см. 13.8 из ссылки NHibernate

...