Mysql HAVING子句的正确用法
我正在使用MySQL,我的目标是只更新表中满足特定条件的字段。以下是我所拥有的:Mysql HAVING子句的正确用法,mysql,having-clause,Mysql,Having Clause,我正在使用MySQL,我的目标是只更新表中满足特定条件的字段。以下是我所拥有的: UPDATE tbl_money AS m SET m.amount = m.amount + (SELECT SUM( b.bn_ppd ) FROM tbl_emp AS e LEFT JOIN tbl_bonuses AS b ON b.b
UPDATE tbl_money AS m
SET m.amount = m.amount + (SELECT SUM( b.bn_ppd )
FROM tbl_emp AS e
LEFT JOIN tbl_bonuses AS b
ON b.bn_id = e.bn_id
WHERE m.u_id = e.u_id
HAVING COUNT(e.u_id) > 0
GROUP BY e.u_id LIMIT 1)
根据以上内容,我想在当前金额上加上一名员工的奖金总额,并且仅限于tbl_emp
中存在的员工。实际上,我收到一条错误消息:
1064-您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以了解第7行“按o.user_id LIMIT 1分组”附近使用的正确语法
如果没有
子句,系统会更新所有员工的金额,但没有任何奖金的员工除外,它只会将金额重置为0(即使他们已经有了金额)。对那些有奖金的人来说,工作很好
有什么想法吗?使用拥有的正确方法是什么
更新:
tbl_bonuses
-----------
bn_id | bn_ppd
1 5
2 2
3 4
4 10
tbl_emp
-------
emp_id | u_id | bn_id | ...
1 30 2
2 30 3
3 31 1
tbl_money
---------
m_id | u_id | amount
1 30 100
2 31 56
3 32 35
更新后,应显示所需的结果
tbl_money
---------
m_id | u_id | amount
1 30 106
2 31 57
3 32 35
但是我得到这个结果,
tbl_money
---------
m_id | u_id | amount
1 30 106
2 31 57
3 32 0
如果需要遵循GROUP BY子句,可以使用以下
UPDATE
语句:
update tbl_money m
INNER JOIN
(
SELECT e.u_id, SUM( b.bn_ppd ) BonusPaid
FROM tbl_emp AS e
LEFT JOIN tbl_bonuses AS b
ON b.bn_id = e.bn_id
GROUP BY e.u_id
HAVING COUNT(e.u_id) > 0
) e
on m.u_id = e.u_id
set m.amount = m.amount + e.BonusPaid
请参见
HAVING
出现在groupby
之后和LIMIT
之前。对于初学者来说,HAVING
子句出现在groupby
之后,而不是之前……太棒了,谢谢大家。不幸的是,即使它工作正常,结果也不是预期的。@Panayiotsnicolaou你们能用一些样本数据编辑你们的帖子,然后得到期望的查询结果吗?正如你们所看到的,我是MySQL的第一步。谢谢你,我会不断提高自己:)@panayiotsnicolaou不客气,我们都必须从某个地方开始