2010-09-02 95 views
14

可以在JPQL中做這個sql查詢的等價物嗎?如何做一個JPQL子查詢?

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' 
) 

回答

26

您需要INsubquery因爲這兩個測試它在JPQL做的工作(根據語法參考他們一起工作)。你也可以看看MEMBER OF expressions

但我認爲還有更好的方法。此類查詢稱爲相關子查詢和使用EXISTS一個隨時可以重新寫出來:

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

JPQL支持EXISTS with subqueries