005.PGSQL-in、not in、exists、not exists、 using 的select查询、delete删除重复数据 使用及其效率对比
1. select 查询
in、not in、exists、not exists 的区别
exists 效率远远大于 in
CREATE SEQUENCE "ioc_dw_second"."test0002_seq" INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1 CYCLE ; CREATE TABLE "ioc_dw_second"."test0002" ( "rid" int4 NOT NULL DEFAULT nextval('"ioc_dw_second".test0002_seq'::regclass), "name" varchar(20) COLLATE "pg_catalog"."default", "update_time" timestamp(6) DEFAULT pg_systimestamp(), CONSTRAINT "test0002_pkey" PRIMARY KEY ("rid") ) ;
表 a 表 b
exists
SELECT * FROM ioc_dw_second.test0001 a WHERE exists (SELECT * FROM ioc_dw_second.test0002 b WHERE a.rid =b.rid )
in
SELECT * FROM ioc_dw_second.test0001 a WHERE rid in (SELECT rid FROM ioc_dw_second.test0002 b )
not exists
SELECT * FROM ioc_dw_second.test0001 a WHERE not exists (SELECT * FROM ioc_dw_second.test0002 b WHERE a.rid =b.rid )
2. delete 删除
in 和 using 的区别
delete from ioc_dw_second.test0001 a
using ioc_dw_second.test0002 b
where a.rid = b.rid
;
使用using删除重复数据
使用using对name去重,只保留id最大的
using 有点类似子查询,可以关联包含在where子语句中的字段的表。
本例子中的a.id<b.id就是筛选出a表中id小于b表中id的记录。
delete from test a using test b where a.id<b.id and a.name=b.name;
使用using删除已经包含b表id的数据
使用using删除已经包含b表id的数据 delete from ioc_ods.o_ls_zfw_cent_conversation a using (select id from ioc_ods.temp_o_ls_zfw_cent_conversation) b where a.id = b.id
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下