JPQL row_number()模拟
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPQL row_number()模拟相关的知识,希望对你有一定的参考价值。
对不起,如果标题不清楚,我会尝试更详细地描述问题 - 有两个表,让它是students
和books
,每个学生可以有很多书。我正在尝试编写JPQL查询,该查询将挑选所有学生,并且每个学生只有一本书(在两个查询之间结果一致之前无关紧要)。在Oracle中我会使用row_number() ...
,然后只使用它所在的书籍.1。有没有办法在JPQL中做类似的事情? (或者可能更容易,因为我不确定我的sql方式是否最佳)。
答案
您可以使用纯SQL,即HAVING
,GROUP BY
和MAX
。
例:
CREATE TABLE books (book_id INT UNSIGNED, stud_id INT UNSIGNED);
INSERT INTO books VALUES
(1,1),
(2,2),
(3,3),
(4,4),
(5,5),
(6,6),
(7,7),
(8,8),
(9,1),
(10,2),
(11,1),
(12,2),
(13,3),
(14,4),
(15,5);
SELECT stud_id, max(book_id) FROM books GROUP BY stud_id HAVING max(book_id);
我把你的问题减少到了一张桌子。另外,我选择MAX
只返回每个学生一个book_id - 最大 - 这两个查询之间是一致的。除非您向我们提供一些有意义的样本数据,否则您必须弄清楚如何将这些内容自行应用于您的问题。希望我能帮忙:)
以上是关于JPQL row_number()模拟的主要内容,如果未能解决你的问题,请参考以下文章
LINQ to SQL 模拟实现 ROW_NUMBER() OVER(ORDER BY ...) 的功能