Mysql 将SQL查询转换为JPQL

Mysql 将SQL查询转换为JPQL,mysql,jpql,Mysql,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 kindName 从my MySQL DB中查找并显示重复的候选项。

以下查询:

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
从my MySQL DB中查找并显示重复的候选项。

现在我需要帮助将其翻译成JPQL,目前还没有成功。

我刚刚进行了试验,提出了与JB相同的解决方案。这在WebSphere上的OpenJPA中运行

    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)   

我不确定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
也可以使用
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

您必须使用JPQL吗?i、 原生SQL不是一种选择?恐怕不是。查询需要在Java应用程序中执行,该应用程序需要在任何DBMS上都可操作。因此,本机SQL.SQL不是很标准的,至少对于这个查询所需要的内容来说是如此。我猜这个查询可以在任何DBMS上运行。是的,我也看不出你的查询离标准SQL有多远……我放弃了自己,无法正确使用JPQL。我使用了上面的本地查询。然而,如果JPQL向导偶然发现了这个问题,请毫不犹豫地回答这个问题:)这是JB发布的相同解决方案吗?它没有在Eclipse上编译,尽管我认为它看起来非常正确。最后我坚持使用本机SQL。它是项目中唯一一个包含大约50-60个JPQL查询的本机SQL查询,但它完成了这项工作。然而,我很想再试一次。如果线程有效的话,我会发布它。通常,使用
COUNT(DISTINCT dup.id)
COUNT(dup.id)
等同于
COUNT(*)
(除非
dup.id
可以有空值),我将在周一早上试用这些。谢谢
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