2010-09-02 150 views
14

¿Es posible hacer el equivalente de esta consulta SQL en JPQL?¿Cómo hago una subconsulta 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' 
) 

Respuesta

26

necesita probar con INsubquery y ya que ambos no trabajar en JPQL (según la referencia de sintaxis que hacen el trabajo en conjunto). También puede consultar MEMBER OF expressions.

Pero hay un mejor enfoque en mi opinión. Dichas consultas se llaman correlacionados sub-consultas y uno siempre se puede volver a escribir usando existe:

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

JPQL apoya EXISTS with subqueries.

Cuestiones relacionadas