1

NHibernate で次の HQL を実行しようとしています:

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

しかし、何らかの理由で、having 句が無視され、2 つのツイートのみに投票がある場合にすべてのツイートがカウントされます。私は基本的に、少なくとも 1 つの投票があるツイートの数を数えたいと考えています。

ここに私のデータベースがあります私のTwitterデータベース

次のようにクエリにグループを追加しようとしました:

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

...しかし、一意の結果ではなく、それぞれが「1」に設定された2つの整数を含むコレクションを返すことになりました。

4

1 に答える 1

3

これは請求書に適合します

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 固有です。NHibernate リファレンスの 13.8 を参照してください。

于 2010-10-07T07:17:25.933 に答える