MySql如何使用UPDATE和HAVING?

标签 mysql sql

我的 table1 看起来像:


id name_co name_r temp sld 1 name1 1 ... ... 2 name2 1 ... ... 3 name2 1 ... ... 4 name2 1 ... ... 5 name3 1 ... ... 6 name2 1 ... ...
I need to increment name_r if there are two or more identical name_co. To be so:

     
id  name_co  name_r  temp  sld
 1   name1     1      ...  ...
 2   name2     1      ...  ...
 3   name2     2      ...  ...
 4   name2     3      ...  ...
 5   name3     1      ...  ...
 6   name2     4      ...  ...

I tried different options and I came to this:

    UPDATE table1 
        SET name_r = name_r + 1 
        WHERE (SELECT COUNT(*) 
        GROUP BY name_co 
        HAVING name_co > 1)

查询有效并返回 0 行,但我知道在某种程度上他错了,但我不知道是什么。谁能帮忙? (还有一些解释,让我更好地理解)

最佳答案

--updated intended targets
UPDATE table1 
SET    name_r = name_r + 1 
WHERE  id IN 
(
    -- return those ids again (to avoid the mysql #1093 error)
    SELECT  id
    FROM
    (   -- get all the ids for those names
        SELECT  id
        FROM    table1
        WHERE   name_co IN
        (   -- get all names that have more than one id
            SELECT   name_co
            FROM     table1 
            GROUP BY name_co 
            HAVING   COUNT(id) > 1
        )
    ) a
)

关于MySql如何使用UPDATE和HAVING?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42261038/

相关文章:

MYSQL 带有 SUM 和子查询的累计总计

php - MySQL:使用 ORDER BY 子句的查询不返回任何内容

php - 通过 PHP 连接到 SQL Server 失败

php - MYSQL 从表中选择,获取表中最新/最后 10 行

sql - 使用 MAX 或 MIN 聚合函数时如何从一组记录中选择适当的记录

sql - 带有 JOIN 元素的递归链?

mysql - 多个插入索引

php - CakePHP 登录未通过身份验证

javascript - 按日期过滤数据库表

sql - 如何根据条件从另一个表更新表中的列?