sql - 如何在 SQL 中删除表中的相等行?
问题描述
我有一个表,其中插入了一些数据。问题是有很多行与其他行相同,我想删除它们,只留下其中的一行。例如:
表人
name pet
---------------------------
Mike Dog
Kevin Dog
Claudia Cat
Mike Dog
Mike Dog
Kevin Snake
如您所见,我们可以多次看到Person
namedMike
有一个Dog
. 但我只想看一次。所以更新这个表后我想要的输出是:
name pet
---------------------------
Mike Dog
Kevin Dog
Claudia Cat
Kevin Snake
如何才能做到这一点?
解决方案
您可以使用exists
. 在明显没有主键的情况下,可以使用系统列:ctid
delete from mytable t
where exists (
select 1
from mytable t1
where t1.name = t.name and t1.pet = t.pet and t1.ctid > t.ctid
);
推荐阅读
- javascript - 带有 if else 语句的函数以提示 javascript
- c++ - 如何知道我是否创建了贪心算法?
- flutter - 处理文件(.xlsx)作为 Flutter 中 Rest API 的响应并下载相同的
- triggers - DB2 预定触发器
- foreground-service - 如何在清单文件的服务标签中添加 FOREGROUND SERVICE PERMISSION?
- javascript - 如何约束随机性
- css - CSS递归菜单在悬停时显示子菜单
- c# - 检查参数是否在 C# Web API 中获取数据
- c# - 如何在“DragEnter”事件中比较类型?
- node.js - 如何使用 .bat 文件执行 node.js 脚本?