サンプルデータベーステーブル:
- ID = 1、msgFrom ='こんにちは'、foobar ='meh'
- ID = 2、msgFrom ='さようなら'、foobar='コメント'
- ID = 3、msgFrom ='こんにちは'、foobar='応答'
必要な出力のサンプル(Hibernateクエリによって生成):
- ID = 1、msgFrom ='こんにちは'、foobar ='meh'
- ID = 2、msgFrom ='さようなら'、foobar='コメント'
上記の例では、msgFrom列が同じであるため、3番目のレコードは結果から除外されます。Java/HibernateクラスがMessageと呼ばれているとしましょう。結果をメッセージオブジェクト(またはとにかくメッセージにキャストできるオブジェクト)のリストとして返したいのですが。可能であればCriteriaAPIを使用したいと思います。この例をSOで見ましたが、似ているように見えますが、現時点では正しく実装できません。
select e from Message e
where e.msgFrom IN (select distinct m.msgFrom
from Message m
WHERE m.msgTo = ?
AND m.msgCheck = 0");
これを行う理由は、データベースで個別のレコードのフィルタリングを実行するためです。そのため、アプリケーションサーバーで何かをフィルタリングする必要がある回答には興味がありません。
編集:基本的に私がやりたいことを示す記事。http://oscarvalles.wordpress.com/2008/01/28/sql-distinct-on-one-column-only/