2013-06-20 3 views
1

У меня есть 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), и я действительно не уверен, что это так, такое прямое преобразование невозможно. Есть ли другой способ?

ответ

0

В конце концов, я не мог найти способ и имел Java делать тяжелую работу (то есть. Сортировка одно второе значение и найти самый большой). Это не так красиво, но это работает.

1

Возможно, вы можете немного изменить запрос. Вы можете использовать EXISTS вместо IN.

select myObject 
from MyObject myObject 
where exists 
( 
    select subMyObject.myFirstValue, max(subMyOject.mySecondValue) 
    from MyObject subMyObject 
    where myObject.myFirstValue = subMyObject.myFirstValue 
    group by subMyObject.myFirstValue 
    having max(subMyOject.mySecondValue) = myObject.mySecondValue 

) 
+0

Я действительно могу изменить запрос, и SQL получает то, что я хочу, поэтому я даю ему попробовать. Я не думал об использовании значений исходного запроса в подзапросе, как в 'myObject.myFirstValue = subMyObject.myFirstValue', поэтому это шаг в правильном направлении. – Pascal

+0

Я пробовал и получаю сообщение об ошибке, симпатичный и симпатичный ** неожиданный токен [,]. Внутреннее исключение: NoViableAltException **. Я попробую снова в понедельник. – Pascal

+0

Я думаю, что «как» токен избыточен в запросе. Я только что отбросил их. – gungor