【发布时间】: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'
)
【问题讨论】:
是否可以在 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'
)
【问题讨论】:
您需要使用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。
【讨论】: