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