Перевести SQL-запрос в JPQL - PullRequest
2 голосов
/ 06 июля 2011

Следующий запрос:

SELECT kinder.kindID, kinder.kindName, kinder.kindVorname 
FROM kinder
INNER JOIN (SELECT kindName FROM kinder
    GROUP BY kindName HAVING count(kindID) > 1) dup ON kinder.kindName = dup.kindName
ORDER BY kindName

находит и отображает дубликаты кандидатов из моей базы данных MySQL.
Теперь мне нужна помощь в переводе его на JPQL, пока что нет никаких успехов.

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Я только что экспериментировал, придумал то же решение, что и JB. Это работает в OpenJPA в WebSphere.

    SELECT k.id, k.name, k.vorname from Kinder k where 
        k.name IN (
        SELECT dup.name FROM Kinder dup 
             GROUP BY dup.name  HAVING count(dup.id) > 1)   
0 голосов
/ 21 июля 2011

Я не уверен, где подзапросы разрешены в JPQL, но ваш запрос:

SELECT kinder.kindID, kinder.kindName, kinder.kindVorname 
FROM kinder
  INNER JOIN
    ( SELECT kindName
      FROM kinder
      GROUP BY kindName
      HAVING count(kindID) > 1
    ) dup
    ON kinder.kindName = dup.kindName
ORDER BY kinder.kindName

также может быть записано (кроме IN) с использованием EXISTS:

SELECT k.kindID, k.kindName, k.kindVorname 
FROM kinder k
WHERE EXISTS
      ( SELECT *
        FROM kinder k2
        WHERE k2.kindName = k.kindName
          AND k2.kindID <> k.kindID
      ) 
ORDER BY k.kindName

или используя ANY:

SELECT k.kindID, k.kindName, k.kindVorname 
FROM kinder k
WHERE k.kindID <> ANY
      ( SELECT k2.kindID
        FROM kinder k2
        WHERE k2.kindName = k.kindName
      ) 
ORDER BY k.kindName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...