如何执行 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'
)
是否可以在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 和子查询对其进行测试,因为两者在 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 支持存在子查询。