JPQL row_number()模拟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPQL row_number()模拟相关的知识,希望对你有一定的参考价值。

对不起,如果标题不清楚,我会尝试更详细地描述问题 - 有两个表,让它是studentsbooks,每个学生可以有很多书。我正在尝试编写JPQL查询,该查询将挑选所有学生,并且每个学生只有一本书(在两个查询之间结果一致之前无关紧要)。在Oracle中我会使用row_number() ...,然后只使用它所在的书籍.1。有没有办法在JPQL中做类似的事情? (或者可能更容易,因为我不确定我的sql方式是否最佳)。

答案

您可以使用纯SQL,即HAVINGGROUP BYMAX

例:

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()模拟的主要内容,如果未能解决你的问题,请参考以下文章

模拟 row_number() MySQL

LINQ to SQL 模拟实现 ROW_NUMBER() OVER(ORDER BY ...) 的功能

SQL 代码在转换为 JPQL 代码时不起作用(ORA-00904 错误代码)

JPQL模糊匹配单个字符

JPQL 测试值是不是在数组中

row_number 和 cte 使用实例:考场监考安排