web-dev-qa-db-fra.com

Comment faire une sous-requête JPQL?

Est-il possible de faire l'équivalent de cette requête sql en 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
ErVeY

Vous devez le tester avec DANS et sous-requête car les deux fonctionnent en JPQL (selon la référence de la syntaxe, ils fonctionnent ensemble). Vous pouvez également consulter expressions MEMBER OF .

Mais il y a une meilleure approche à mon avis. De telles requêtes sont appelées sous-requêtes corrélées et on peut toujours les réécrire en utilisant EXISTS:

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

JPQL prend en charge EXISTE avec des sous-requêtes .

34
topchef