كيف أقوم بمساع JPQL الفرعي؟
سؤال
من الممكن القيام بما يعادل استعلام SQL في JPQL؟
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 (وفقًا لما ذكره بناء الجملة ، فإنهما يعملان معًا). يمكنك أيضا أن تنظر إلى عضو في التعبيرات.
ولكن هناك نهج أفضل في رأيي. تسمى مثل هذه الاستعلامات السحر الفرعي المرتبط ويمكن للمرء دائمًا إعادة كتابةها باستخدام:
SELECT * FROM COUNTRIES c WHERE
EXISTS (
SELECT 'found' FROM PORTS p
WHERE p.COUNTRY_ID = c.COUNTRY_ID AND STATE = 'A'
)
JPQL يدعم موجود مع الفائزين.
لا تنتمي إلى StackOverflow