【发布时间】:2012-11-07 09:20:40
【问题描述】:
我有两个像这样的表格 DOCUMENT 和 ATTRIBUTES
-
DOCUMENT(id), -
ATTRIBUTE(name, value, doc_fk).
我需要运行一个类似“抽象查询”的查询
select top 100 documents
where $state='COMPLETED'
order by $creationDate
其中$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
...
【问题讨论】:
-
在下面查看我的答案。看看有没有帮助。
标签: sql sql-order-by limit parent-child