2010-09-02 13 views
14

Il est possible de faire l'équivalent de cette requête sql en JPQL?Comment faire une sous-requête 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' 
) 

Répondre

26

Vous devez le tester avec IN et subquery puisque les deux ne fonctionnent en JPQL (selon référence de syntaxe qu'ils travaillent ensemble). Vous pouvez également regarder MEMBER OF expressions.

Mais il y a une meilleure approche à mon avis. Ces requêtes sont appelées sous-requêtes corrélées et on peut toujours les ré-écrire avec exists:

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

JPQL soutient EXISTS with subqueries.