我正在使用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)
有了上述内容,我想在当前金额中加上员工所拥有的奖金总额,并且仅添加到tbl_emp
中存在的员工。实际上,我收到一条错误消息:
1064 - 您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在#BY; GROUP BY附近使用正确的语法o.user_id LIMIT 1)'在第7行
如果没有HAVING
条款,系统会更新所有员工的金额,但是那些没有任何奖金的人,只需将金额重置为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
答案 0 :(得分:2)
HAVING需要追踪GROUP BY子句
答案 1 :(得分: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