如何在 HAVING 子句中使用别名?
How can I use an alias with HAVING clause?
我正在尝试将 JPQL 等同于以下 SQL。
SELECT last_name, COUNT(1) AS c
FROM actor
GROUP BY last_name
HAVING c > 1
ORDER BY c DESC
我尝试使用以下 JPQL。
SELECT e.lastName, COUNT(e.lastName) AS c
FROM Actor
GROUP BY e.lastName
HAVING c > 1
ORDER BY c DESC
并且 Hibernate 生成以下 SQL 并抱怨。
select
actor0_.last_name as col_0_0_,
count(actor0_.last_name) as col_1_0_
from
actor actor0_
group by
actor0_.last_name
having
c>=?
order by
col_1_0_ DESC limit ?
当我像这样更改 JPQL 时,它起作用了。
SELECT e.lastName, COUNT(e.lastName) AS c
FROM Actor
GROUP BY e.lastName
HAVING COUNT(e.lastName) > 1
ORDER BY c DESC
如何在 HAVING
子句中使用名为 c
的别名?
如果我就是不行,查询可以吗?有什么最佳方法吗?
谢谢。
JPQL 不支持在 HAVING
子句中使用别名,主要是因为并非所有 SQL 引擎都支持此行为。例如,Oracle 和 Postgres 都不支持您的第一个查询版本。
如果您想使用纯 JPQL,那么只需在 HAVING
子句中重复整个计数表达式即可。如果你真的想在 HAVING
子句中重用别名,那么让你的查询成为本机查询,假设 MySQL 是基础数据库,它将 运行 没有任何问题。
我正在尝试将 JPQL 等同于以下 SQL。
SELECT last_name, COUNT(1) AS c
FROM actor
GROUP BY last_name
HAVING c > 1
ORDER BY c DESC
我尝试使用以下 JPQL。
SELECT e.lastName, COUNT(e.lastName) AS c
FROM Actor
GROUP BY e.lastName
HAVING c > 1
ORDER BY c DESC
并且 Hibernate 生成以下 SQL 并抱怨。
select
actor0_.last_name as col_0_0_,
count(actor0_.last_name) as col_1_0_
from
actor actor0_
group by
actor0_.last_name
having
c>=?
order by
col_1_0_ DESC limit ?
当我像这样更改 JPQL 时,它起作用了。
SELECT e.lastName, COUNT(e.lastName) AS c
FROM Actor
GROUP BY e.lastName
HAVING COUNT(e.lastName) > 1
ORDER BY c DESC
如何在 HAVING
子句中使用名为 c
的别名?
如果我就是不行,查询可以吗?有什么最佳方法吗?
谢谢。
JPQL 不支持在 HAVING
子句中使用别名,主要是因为并非所有 SQL 引擎都支持此行为。例如,Oracle 和 Postgres 都不支持您的第一个查询版本。
如果您想使用纯 JPQL,那么只需在 HAVING
子句中重复整个计数表达式即可。如果你真的想在 HAVING
子句中重用别名,那么让你的查询成为本机查询,假设 MySQL 是基础数据库,它将 运行 没有任何问题。