我有两个表项目和计算我想在一个查询
中显示不透明的项目和他的厨师这样做了
Query q=se.createQuery("SELECT p.idpro,p.IdProjet,p.NomProjet,p.DateDeb,p.DateFin,p.nomimg (SELECT c.Nom,c.Prenom FROM Compte u WHERE u.Id = p.IdChef group by u.id) FROM Projets p ");
listPrj=q.list();
data.setWrappedData(listPrj);
但仍然是获取错误
Caused by: org.hibernate.QueryException: aggregate function expected before ( in SELECT [SELECT p.idpro,p.IdProjet,p.NomProjet,p.DateDeb,p.DateFin,p.nomimg (SELECT c.Nom,c.Prenom FROM com.persistence.Compte u WHERE u.Id = p.IdChef group by u.id) FROM com.persistence.Projets p ]
at org.hibernate.hql.classic.SelectParser.token(SelectParser.java:100)
at org.hibernate.hql.classic.ClauseParser.token(ClauseParser.java:86)
at org.hibernate.hql.classic.ClauseParser.end(ClauseParser.java:113)
at org.hibernate.hql.classic.PreprocessingParser.end(PreprocessingParser.java:122)
at org.hibernate.hql.classic.ParserHelper.parse(ParserHelper.java:29)
我不知道如何解决它和
答案 0 :(得分:1)
问题的直接原因在于内部查询:
SELECT c.Nom, -- <-- Aggregate (min, max, sum etc.) expected here
c.Prenom -- <-- Aggregate (min, max, sum etc.) expected here
FROM Compte u
WHERE u.Id = p.IdChef
GROUP BY u.id
当使用GROUP BY时,SELECT中的所有字段都应该是聚合函数或 在GROUP BY
查询本身非常麻烦,类似的东西,恕我直言,预计:
SELECT p.idpro,
p.IdProjet,
p.NomProjet,
p.DateDeb,
p.DateFin,
p.nomimg,
c.Nom,
c.Prenom
FROM Compte c,
Projets p
WHERE (c.Id = p.IdChef)
答案 1 :(得分:0)
这是您的查询格式,以便我可以阅读:
SELECT p.idpro, p.IdProjet, p.NomProjet, p.DateDeb, p.DateFin, p.nomimg
(SELECT c.Nom, c.Prenom
FROM Compte u
WHERE u.Id = p.IdChef
group by u.id
)
FROM Projets p
您拥有的第一列是子查询之前缺少逗号。此外,您使用c
子句中的表引用select
,但它永远不会定义。我们假设逗号在那里,u
应该是c
(表别名的缩写是一件好事)。
您的子查询正在u.id
汇总; select语句是c.nom, c.prenom
。这会产生错误。在大多数SQL版本中(MySQL是一个主要的例外),聚合查询中的所有列都必须在group by
或聚合函数中。
此外,group by
不是必需的,因为您已将其限制为一个值。以下是使用limit
:
SELECT p.idpro, p.IdProjet, p.NomProjet, p.DateDeb, p.DateFin, p.nomimg,
(SELECT c.Nom, c.Prenom
FROM Compte c
WHERE c.Id = p.IdChef
limit 1
)
FROM Projets p
编辑:
我觉得子查询返回两个值。嵌套的select
语句中不允许这样做。要包含名称,只需使用常规联接:
SELECT p.idpro, p.IdProjet, p.NomProjet, p.DateDeb, p.DateFin, p.nomimg, c.Nom, c.Prenom
FROM Projets p left outer join
Compte c
on c.Id = p.IdChef
答案 2 :(得分:0)
SELECT p.idpro,p.IdProjet,p.NomProjet,p.DateDeb,p.DateFin,p.nomimg,c.Nom,c.Prenom
from projects p,Compte c
where c.Id=p-IdChef
group by c.uid