如何删除数据库表中存在大写重复项的小写记录
仅删除存在对应大写重复项的非全大写记录
核心思路
只删除那些存在对应全大写重复项的非全大写记录,全大写记录以及无对应全大写的非全大写记录均保留。
验证待删除记录(必做步骤)
先执行查询确认要删除的目标记录,避免误删:
-- 替换 your_table 为你的表名 SELECT t1.* FROM your_table t1 JOIN your_table t2 ON UPPER(t1.Nombre) = t2.Nombre WHERE t1.Nombre != UPPER(t1.Nombre) AND t2.Nombre = UPPER(t2.Nombre);
针对不同数据库的删除语句
MySQL
DELETE t1 FROM your_table t1 JOIN your_table t2 ON UPPER(t1.Nombre) = t2.Nombre WHERE t1.Nombre != UPPER(t1.Nombre) AND t2.Nombre = UPPER(t2.Nombre);
PostgreSQL
DELETE FROM your_table t1 USING your_table t2 WHERE UPPER(t1.Nombre) = t2.Nombre AND t1.Nombre != UPPER(t1.Nombre) AND t2.Nombre = UPPER(t2.Nombre);
SQL Server
DELETE t1 FROM your_table t1 INNER JOIN your_table t2 ON UPPER(t1.Nombre) = t2.Nombre WHERE t1.Nombre <> UPPER(t1.Nombre) AND t2.Nombre = UPPER(t2.Nombre);
逻辑说明
UPPER(t1.Nombre) = t2.Nombre:匹配非全大写记录对应的全大写重复项t1.Nombre != UPPER(t1.Nombre):筛选出非全大写的记录t2.Nombre = UPPER(t2.Nombre):确保匹配的是全大写的重复记录
内容的提问来源于stack exchange,提问作者fernan2
相关产品推荐
相关产品推荐

