簡體   English   中英

在HQL中使用內部聯接的子查詢

[英]Subquery with Inner Join in HQL

我想在評級表中打印具有外鍵Movie_id的Movies表中的標題。在評級表中,我們必須根據movie_id發生得到前10個結果。因為HQL中不允許限制所以使用setMaxResults

Query q=session.createQuery("select Title from Movies  as M Inner Join ( SELECT Movie_id, COUNT(*)  FROM Rating  GROUP BY Movie_id ORDER BY COUNT(*) DESC LIMIT 10 ) as R ON M.Movie_id=R.Movie_id").setMaxResults(10);

例外情況是:

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 59 [select Title from com.rahul.model.Movies  as M Inner Join ( SELECT Movie_id, COUNT(*)  FROM com.rahul.model.Rating  GROUP BY Movie_id ORDER BY COUNT(*) DESC LIMIT 10 ) as R ON M.Movie_id=R.Movie_id]

既然HQL不支持子查詢怎么實現呢?

您可以將此查詢編寫為JOIN / GROUP BY

select m.Title
from Movies m Inner Join
     Rating r
     on m.Movie_id = r.Movie_id
group by m.Movie_Id, m.Title
order by count(*) desc
limit 10;

解決

Query q=session.createQuery("select m.title from Movies m Inner Join Rating r on m.movie_id = r.movie_id group by m.movie_id, m.title order by count(*) desc").setMaxResults(10);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM