[英]How do I do a JPQL SubQuery?
It is possible to do the equivalent of this sql query in JPQL?可以在 JPQL 中执行与此 sql 查询等效的操作吗?
SELECT *
FROM COUNTRIES c WHERE COUNTRY_ID IN (
SELECT DISTINCT COUNTRY_ID
FROM PORTS p
WHERE p.COUNTRY_ID = c.COUNTRY_ID AND STATE = 'A'
)
You need to test it with IN and subquery since both do work in JPQL (according to syntax reference they do work together). 您需要使用IN和子查询对其进行测试,因为它们都可以在JPQL中工作(根据语法参考,它们可以一起工作)。 You may also look at MEMBER OF expressions . 您还可以查看MEMBER OF表达式 。
But there is a better approach in my opinion. 但在我看来,有更好的方法。 Such queries are called correlated sub-queries and one can always re-write them using EXISTS: 此类查询称为相关子查询,可以使用EXISTS重写它们:
SELECT * FROM COUNTRIES c WHERE
EXISTS (
SELECT 'found' FROM PORTS p
WHERE p.COUNTRY_ID = c.COUNTRY_ID AND STATE = 'A'
)
JPQL supports EXISTS with subqueries . JPQL支持带有子查询的EXISTS 。
Yes, It is possible to use subquery
with IN
operator in JPQL.是的,可以在 JPQL 中使用带有IN
运算符的subquery
。 I had a similar usecase and it worked for me.我有一个类似的用例,它对我有用。 My query was as follows.我的查询如下。
@Query("SELECT g FROM Group g WHERE g.id IN (SELECT DISTINCT m.groupId FROM Member m WHERE m.id IN (?1))")
List<Group> findAllGroupsOfMembers(List<BigInteger> memberIds);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.