Frage

Es ist möglich, das äquivalent diese SQL-Abfrage in JPQL zu tun?

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'
) 
War es hilfreich?

Lösung

Sie müssen es testen mit IN und Unterabfrage da beide Arbeit verrichten in JPQL (gemäß Syntax Bezug sie funktionieren zusammen). Sie können auch einen Blick auf MEMBER OF Ausdrücke .

Aber es ist ein besserer Ansatz meiner Meinung nach. Solche Abfragen werden korrelierte Unterabfragen genannt und man kann immer neu schreiben sie 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 VORHANDEN mit Subqueries .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top