You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写带GROUP BY的UPDATE查询?能否更新不同ID同值的两行?

如何编写带GROUP BY逻辑的UPDATE查询?

嘿,我来帮你搞定这个问题!首先得说,你原来的SQL语句有两个明显问题,而且直接在UPDATE里用GROUP BY是行不通的,咱们一步步理清楚:

先修正你原始SQL的语法错误

你写的语句里deleted = 1, WHERE id = '1'多了个逗号,这会直接导致语法报错,得先删掉这个逗号。不过就算删掉逗号,UPDATE ... GROUP BY date这种写法本身也不符合SQL规范——GROUP BY是用来聚合统计数据的,而UPDATE是要定位到具体行做修改,两者不能直接这么组合。

实现你的需求:更新ID不同但date相同的行

你的目标是修改那些ID不同但date值重复的行,对吧?这里有两种常用的实现方式,适配大多数数据库:

方法1:用子查询筛选重复的date值

先通过子查询找出所有出现过多次的date(也就是有重复的date),再用这些date去匹配要更新的行:

UPDATE mine
SET reason = 'is this possible?', deleted = 1
WHERE date IN (
    SELECT date
    FROM mine
    GROUP BY date
    HAVING COUNT(*) > 1  -- 只保留出现多次的date
)

注意:如果是MySQL这类数据库,直接在UPDATE的WHERE里引用原表会报错,这时候可以给子查询套一层临时表别名:

UPDATE mine
SET reason = 'is this possible?', deleted = 1
WHERE date IN (
    SELECT date
    FROM (
        SELECT date
        FROM mine
        GROUP BY date
        HAVING COUNT(*) > 1
    ) AS temp_table
)

方法2:用JOIN关联(更高效,适合大表)

用JOIN把原表和筛选出重复date的子查询关联起来,直接更新匹配的行:

UPDATE mine m
JOIN (
    SELECT date
    FROM mine
    GROUP BY date
    HAVING COUNT(*) > 1
) AS duplicate_dates ON m.date = duplicate_dates.date
SET m.reason = 'is this possible?', m.deleted = 1

如果是针对特定ID对应的date更新

如果你是想更新和ID为'1'的行date相同的所有行(不管ID是不是1),那更简单,直接用子查询获取目标date即可:

UPDATE mine
SET reason = 'is this possible?', deleted = 1
WHERE date = (SELECT date FROM mine WHERE id = '1')

总结

你原来的写法不可行,但通过上面的子查询或JOIN方式,完全可以实现更新ID不同但date相同的多行数据的需求。

内容的提问来源于stack exchange,提问作者Jorge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:03:03