我正在使用MySQL,我的目标是只在满足特定条件的表中UPDATE
字段。以下是我所拥有的:
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)
有了上述,我想补充一个目前数额的奖金总额,雇员有,只向员工在“抄送”。事实上,我收到了一条错误消息:
1064-您的SQL语法有错误;请查看与MySQL服务器版本相对应的手册,在第7行的“GROUP BY o.user\u id LIMIT 1”附近找到正确的语法
如果没有
tbl_emp
子句,系统会更新所有员工的金额,但没有任何奖金的员工除外,它只是将金额重置为0(即使他们已经有了金额)。对那些有奖金的人来说,工作很好。有什么想法吗?使用
HAVING
的正确方法是什么?更新:
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
最佳答案
您可以使用以下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
见SQL Fiddle with Demo