2010-09-02 11 views
14

Es ist möglich, das Äquivalent dieser SQL-Abfrage in JPQL zu tun?Wie mache ich eine JPQL-Unteranfrage?

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

Antwort

26

Sie müssen es testen mit IN und subquery da beide in JPQL arbeiten (nach Syntax Referenz sie zusammen arbeiten). Sie können sich auch MEMBER OF expressions ansehen.

Aber es gibt meiner Meinung nach einen besseren Ansatz. Solche Abfragen werden korrelierte Unterabfragen genannt, und man kann sie immer neu schreiben, mit VORHANDEN:

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

JPQL unterstützt EXISTS with subqueries.