gpt4 book ai didi

mysql - 使用多个 JOINS 将 MYSQL 查询转换为 HQL

转载 作者:行者123 更新时间:2023-11-29 18:40:32 25 4
gpt4 key购买 nike

大家。

我使用 grails 3.3.0.M2 框架和 mysql 作为数据源,以下 sql 查询按预期工作

SELECT 
c.name,
SUM(CASE
WHEN t.status = 'open' THEN 1
ELSE 0
END) 'open',
SUM(CASE
WHEN t.status = 'pending' THEN 1
ELSE 0
END) 'in progress',
SUM(CASE
WHEN t.status = 'closed' THEN 1
ELSE 0
END) 'closed'
FROM
tickets t
INNER JOIN
users u ON t.user_id = u.id
INNER JOIN
user_coordinations uc ON uc.user_id = u.id
INNER JOIN
coordinations c ON c.id = uc.coordination_id
GROUP BY 1

我使用隐式 JOIN 转换为 HQL 但得到了错误的结果,这是 hql 查询:

SELECT 
c.name,
SUM(CASE
WHEN t.status = 'open' THEN 1
ELSE 0
END),
SUM(CASE
WHEN t.status = 'pending' THEN 1
ELSE 0
END),
SUM(CASE
WHEN t.status = 'closed' THEN 1
ELSE 0
END)
FROM
Ticket t, User u, UserCoordination uc, Coordination c
WHERE
MONTH(t.dateCreated) = :month
GROUP BY 1

为了获得正确的结果,堆栈溢出用户帮助我理解查询需要使用显式联接,这里的问题:Group by a field that does not belongs to the consulted table

现在我正在尝试以下查询:

SELECT 
c.name,
SUM(CASE
WHEN t.status = 'open' THEN 1
ELSE 0
END),
SUM(CASE
WHEN t.status = 'pending' THEN 1
ELSE 0
END),
SUM(CASE
WHEN t.status = 'closed' THEN 1
ELSE 0
END)
FROM
Ticket t
INNER JOIN
User u
INNER JOIN
UserCoordination uc
INNER JOIN
Coordination c
WHERE
MONTH(t.dateCreated) = :month
GROUP BY 1

但是我收到了com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException,其中包含引起的消息您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的“inner join user_coordinations usercoordi2_ on inner join opportunity 协调 coordinat”附近使用的正确语法

感谢您的帮助和时间

最佳答案

SELECT new map(
c.name as name,
(CASE
WHEN t.status = 'open' THEN 1
ELSE 0
END) as open,
(CASE
WHEN t.status = 'pending' THEN 1
ELSE 0
END) as pending,
(CASE
WHEN t.status = 'closed' THEN 1
ELSE 0
END) as closed,
SUM(open) as openSum,
SUM(pending) as pendingSum,
SUM(closed) as closedSum
)
FROM
Ticket t
left join t.user u left join u.userCoordination uc left join uc.coordination c
WHERE
MONTH(t.dateCreated) = :month

//按 1 分组

上面你缺少的东西更像是你需要的,你需要的选择新 map (i.item as item...如果您将其基础知识与您所拥有的以及我尝试做的进行比较,您就会明白为什么会出现错误。

不确定你的分组依据应该是按什么分组。不确定内部联接是否意味着联接,如果是这种情况,则省略所有左联接,因为左联接尝试连接并获取任何空的 hasMany 关系等。

关于mysql - 使用多个 JOINS 将 MYSQL 查询转换为 HQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44974695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com