web-dev-qa-db-ja.com

JPQLサブクエリを実行するにはどうすればよいですか?

JPQLでこのSQLクエリに相当することは可能ですか?

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

[〜#〜] in [〜#〜] および subquery でテストする必要があります。両方ともJPQLで機能するためです(構文参照によると、これらは一緒に機能します)。 MEMBER OF式 もご覧ください。

しかし、私の意見ではより良いアプローチがあります。このようなクエリは相関サブクエリと呼ばれ、EXISTSを使用していつでも書き換えることができます。

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

JPQLは サブクエリを含むEXISTS をサポートしています。

34
topchef