Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql HAVING子句的正确用法_Mysql_Having Clause - Fatal编程技术网

Mysql HAVING子句的正确用法

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

我正在使用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.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不客气,我们都必须从某个地方开始