代码之家  ›  专栏  ›  技术社区  ›  ErVeY

如何执行JPQL子查询?

  •  20
  • ErVeY  · 技术社区  · 15 年前

    是否可以在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'
    ) 
    
    1 回复  |  直到 8 年前
        1
  •  33
  •   Willi Mentzel user670265    8 年前

    你需要用 IN subquery 因为这两者都在JPQL中工作(根据语法引用,它们一起工作)。你也可以看看 MEMBER OF expressions .

    但我认为有更好的方法。此类查询称为相关子查询,您可以始终使用exists重新编写它们:

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

    JPQL支持 EXISTS with subqueries .