簡體   English   中英

如何進行 JPQL 子查詢?

[英]How do I do a JPQL SubQuery?

可以在 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'
) 

您需要使用IN子查詢對其進行測試,因為它們都可以在JPQL中工作(根據語法參考,它們可以一起工作)。 您還可以查看MEMBER OF表達式

但在我看來,有更好的方法。 此類查詢稱為相關子查詢,可以使用EXISTS重寫它們:

SELECT * FROM COUNTRIES c WHERE 
EXISTS (
        SELECT 'found' FROM PORTS p 
        WHERE p.COUNTRY_ID = c.COUNTRY_ID AND STATE = 'A'
) 

JPQL支持帶有子查詢的EXISTS

是的,可以在 JPQL 中使用帶有IN運算符的subquery 我有一個類似的用例,它對我有用。 我的查詢如下。

@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.

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