我有两张像这样的表格 DOCUMENT 和 ATTRIBUTES
DOCUMENT(id)
,ATTRIBUTE(name, value, doc_fk)
.
我需要运行一个类似“抽象查询”的查询
select top 100 documents
where $state='COMPLETED'
order by $creationDate
where$state
和$creationDate
是两个属性。
请注意,限制是针对文档,而不是属性,并且排序和过滤器针对两个不同的属性。最终查询应返回所有文档属性,而不仅仅是过滤/排序的属性。
我能够用一个非常复杂的查询来写这个,我正在寻找更好的选择。如果有用,我可以发布我的解决方案,但我不想指出你可能是错误的方向。
获得一些额外的文档是可以的,比如 1000 个而不是 100 个,并在内存中进行过滤/排序。限制不精确可能没问题,比如 74 而不是所需的限制 100,但离它不太远。
额外的“软”要求:
- 该查询应该适用于多个数据库(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
...