У меня есть SQL-запрос, который я пытаюсь преобразовать в JPQL. Запрос выглядит следующим образом:Является ли подзапрос IN совпадающим с несколькими столбцами в JPQL?
SELECT *
FROM MyTable
WHERE (myFirstColumn, mySecondColumn) IN (
SELECT myFirstColumn, max(mySecondColumn)
FROM MyTable
GROUP BY myFirstColumn
)
Моя попытка преобразования проста:
select myObject
from MyObject as myObject
where (myObject.myFirstValue, myObject.mySecondValue) in (
select subMyObject.myFirstValue, max(subMyOject.mySecondValue)
from MyObject as subMyObject
group by subMyObject.myFirstValue
)
MyObject отображается в MyTable (с помощью аннотаций).
Если я понимаю документы JPQL в инструкции IN (http://openjpa.apache.org/builds/1.2.3/apache-openjpa/docs/jpa_langref.html#jpa_langref_in), и я действительно не уверен, что это так, такое прямое преобразование невозможно. Есть ли другой способ?
Я действительно могу изменить запрос, и SQL получает то, что я хочу, поэтому я даю ему попробовать. Я не думал об использовании значений исходного запроса в подзапросе, как в 'myObject.myFirstValue = subMyObject.myFirstValue', поэтому это шаг в правильном направлении. – Pascal
Я пробовал и получаю сообщение об ошибке, симпатичный и симпатичный ** неожиданный токен [,]. Внутреннее исключение: NoViableAltException **. Я попробую снова в понедельник. – Pascal
Я думаю, что «как» токен избыточен в запросе. Я только что отбросил их. – gungor