これらのようなDOCUMENTとATTRIBUTESの2つのテーブルがあります
DOCUMENT(id)
、ATTRIBUTE(name, value, doc_fk)
.
この「抽象クエリ」のように機能するクエリを実行する必要があります
select top 100 documents
where $state='COMPLETED'
order by $creationDate
$state
と$creationDate
は 2 つの属性です。
制限は属性ではなくドキュメントにあり、並べ替えとフィルターは 2 つの異なる属性にあることに注意してください。最後のクエリは、フィルタリング/ソートされたものだけでなく、すべてのドキュメント属性を返す必要があります。
非常に複雑なクエリでこれを書くことができたので、より良い代替手段を探しています。役立つ場合はソリューションを投稿できますが、おそらく間違った方向に向けたくありません。
100 ではなく 1000 のように、少数の余分なドキュメントを取得し、メモリ内でフィルター処理/並べ替えを行うことは問題ありません。必要な制限100の代わりに74のように、制限が正確でなくても問題ありませんが、それから遠すぎません.
追加の「ソフト」要件:
- クエリはいくつかのデータベース (oracle、mysql、および sqlserver) で動作するはずなので、すべてのプラットフォームで利用できない限り、奇妙な分析関数は避ける必要があります。
- JPA(eclipselink 2.4.0実装)で動作するはずです
期待される出力は次のようなものです
DOC_ID ATTRIBUTE_NAME VALUE
123 state COMPLETED
123 creationDate 21/11/2012
123 userid someone
456 state COMPLETED
...