MySql数据库中同一表上的更新字段

MySql数据库中同一表上的更新字段,mysql,Mysql,在表doTable中,我需要将字段Priority设置为1,其中单个CBT\u ID存在这些条件: 首席执行官>0 总和(总和)>50 我尝试了这个sql查询,但没有成功,因为我有一个错误 mysql> UPDATE `doTable` pd INNER JOIN `doTable` pd2 ON ( pd.CBT_ID = pd2.CBT_ID AND pd.CEO > 0 AND SUM(pd.CE_TOT) > 50 ) SET pd.Priori

在表
doTable
中,我需要将字段
Priority
设置为
1
,其中单个
CBT\u ID
存在这些条件:

  • 首席执行官>0
  • 总和(总和)>50
  • 我尝试了这个sql查询,但没有成功,因为我有一个错误

    mysql> UPDATE `doTable` pd
    INNER JOIN `doTable` pd2 ON (
        pd.CBT_ID = pd2.CBT_ID
        AND pd.CEO > 0
        AND SUM(pd.CE_TOT) > 50
    )
    SET pd.Priority = 1;
    1111 - Invalid use of group function
    
    如何解决此问题?

    尝试使用此SQL

    UPDATE doTable
    SET Priority = 1
    WHERE (
    SELECT *
    FROM doTable
    WHERE CEO > 0
    AND SUM(CE_TOT) > 50
    );
    
    如果出现错误,请尝试将和更改为

    或者同时运行两个查询

    UPDATE doTable SET Priority=1 WHERE CEO > 0;
    UPDATE doTable SET Priority=1 WHERE SUM(CE_TOT) > 50;
    
    试试这个SQL

    UPDATE doTable
    SET Priority = 1
    WHERE (
    SELECT *
    FROM doTable
    WHERE CEO > 0
    AND SUM(CE_TOT) > 50
    );
    
    如果出现错误,请尝试将和更改为

    或者同时运行两个查询

    UPDATE doTable SET Priority=1 WHERE CEO > 0;
    UPDATE doTable SET Priority=1 WHERE SUM(CE_TOT) > 50;
    

    不能在
    where
    子句中使用像
    sum
    这样的聚合函数。在不知道表结构的情况下编写查询是很困难的,但如果有多行具有相同的CBT_ID,则可以尝试以下方法:

    UPDATE `doTable`
    SET Priority = 1 
    where CBT_ID in 
        (select CBT_ID from `doTable` 
         where CEO > 0 
         group by CBT_ID 
         having SUM(CE_TOT) > 50
         );
    

    不能在
    where
    子句中使用像
    sum
    这样的聚合函数。在不知道表结构的情况下编写查询是很困难的,但如果有多行具有相同的CBT_ID,则可以尝试以下方法:

    UPDATE `doTable`
    SET Priority = 1 
    where CBT_ID in 
        (select CBT_ID from `doTable` 
         where CEO > 0 
         group by CBT_ID 
         having SUM(CE_TOT) > 50
         );
    
    试试这个:

    UPDATE `doTable` AS r
    JOIN (
        SELECT
            CBT_ID,
            SUM(CE_TOT) AS q,
            CEO
        FROM
            `doTable`
        WHERE
            CEO > 0
        GROUP BY
            CBT_ID
        HAVING
            q > 50
    ) AS grp ON r.CBT_ID = grp.CBT_ID
    SET r.Priority = 1
    WHERE
        grp.CEO > 0
    AND grp.q > 50;
    
    试试这个:

    UPDATE `doTable` AS r
    JOIN (
        SELECT
            CBT_ID,
            SUM(CE_TOT) AS q,
            CEO
        FROM
            `doTable`
        WHERE
            CEO > 0
        GROUP BY
            CBT_ID
        HAVING
            q > 50
    ) AS grp ON r.CBT_ID = grp.CBT_ID
    SET r.Priority = 1
    WHERE
        grp.CEO > 0
    AND grp.q > 50;
    

    谢谢,但我有相同的错误:1111-组函数的使用无效您需要满足两个条件才能使优先级为1吗?如果不是,那么第二个解决方案也应该适用于您。谢谢,但我有相同的错误:1111-组函数的使用无效您是否需要满足两个条件才能使优先级为1?如果不是,那么第二种解决方案也应该对您有效。