2010-09-02 18 views
14

È possibile eseguire l'equivalente di questa query sql in JPQL?Come si esegue una subquery 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' 
) 

risposta

26

è necessario testare con IN e subquery dal momento che entrambi eseguire lavori nelle JPQL (in base al riferimento sintassi che lavorano insieme). Puoi anche guardare MEMBER OF expressions.

Ma secondo me c'è un approccio migliore. Tali domande sono chiamati sub-query correlate e si può sempre ri-scrivere utilizzando ESISTE:

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

JPQL supporta EXISTS with subqueries.