【问题标题】:How do I do a JPQL SubQuery?如何进行 JPQL 子查询?
【发布时间】:2011-04-07 10:53:49
【问题描述】:

是否可以在 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'
) 

【问题讨论】:

    标签: java orm jpa jpql


    【解决方案1】:

    您需要使用INsubquery 对其进行测试,因为它们都可以在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-08
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      相关资源
      最近更新 更多