SQL表存在重复值时更新duplicated标记列的问题咨询
问题原因
你编写的SQL存在两个核心问题:
- 缺少主表和子查询的关联条件,无法精准匹配到存在重复值的对应行,要么会更新全表要么直接语法报错
- 直接用
table作为表名属于SQL保留关键字,也会引发执行报错,需要替换为实际的业务表名
兼容多数据库的通用写法
该写法适配MySQL、PostgreSQL、SQL Server等绝大多数主流数据库:
UPDATE 你的实际表名 SET duplicated = true WHERE name IN ( -- 嵌套一层子查询规避部分数据库不允许UPDATE时直接引用原表的限制 SELECT name FROM ( SELECT name FROM 你的实际表名 GROUP BY name HAVING COUNT(*) > 1 ) AS duplicate_names );
PostgreSQL专属简化写法
如果你使用的是PostgreSQL,还可以用UPDATE JOIN的写法,执行效率更高:
UPDATE 你的实际表名 t SET duplicated = true FROM ( SELECT name FROM 你的实际表名 GROUP BY name HAVING COUNT(*) > 1 ) AS sub WHERE t.name = sub.name;
内容的提问来源于stack exchange,提问作者Funny Dog
相关产品推荐
相关产品推荐

