我正在使用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

10-05 20:32
查看更多