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    

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM