2010-09-02 13 views
14

Możliwe jest wykonanie odpowiednika tej kwerendy sql w JPQL?Jak wykonać podkatalog JPQ?

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

Odpowiedz

26

trzeba przetestować go z IN i subquery ponieważ oba działają w JPQL (zgodnie z odniesieniem składni one działają razem). Możesz również spojrzeć na MEMBER OF expressions.

Jednak moim zdaniem istnieje lepsze podejście. Takie pytania są nazywane skorelowanych sub-zapytań i zawsze można ponownie zapisać je za pomocą istnieje:

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

JPQL obsługuje EXISTS with subqueries.

Powiązane problemy