sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法建站知識(shí)
導(dǎo)讀:1建站知識(shí)重復(fù)數(shù)據(jù),通常有兩種:一是完全重復(fù)的記錄,也就是所有字段的值都一樣;二是部分字段值重復(fù)的記錄如何seo優(yōu)化推廣網(wǎng)站網(wǎng)站建設(shè)。
一. 刪除完全重復(fù)的記錄
完全重復(fù)的數(shù)據(jù),通常是由于沒(méi)有設(shè)置主鍵/唯一鍵約束導(dǎo)致的。測(cè)試數(shù)據(jù):
復(fù)制代碼 代碼如下:
if OBJECT_ID('duplicate_all') is not nulldrop table duplicate_all GO create table duplicate_all ( c1 int, c2 int, c3 varchar(100) ) GO insert into duplicate_all select 1,100,'aaa' union allselect 1,100,'aaa' union allselect 1,100,'aaa' union allselect 1,100,'aaa' union allselect 1,100,'aaa' union allselect 2,200,'bbb' union allselect 3,300,'ccc' union allselect 4,400,'ddd' union allselect 5,500,'eee'GO
網(wǎng)站建設(shè)教程(1) 借助臨時(shí)表
利用DISTINCT得到單條記錄,刪除源數(shù)據(jù),然后導(dǎo)回不重復(fù)記錄。如果表不大的話,可以把所有記錄導(dǎo)出一次,然后truncate表后再導(dǎo)回,這樣可以避免delete的日志操作。
復(fù)制代碼 代碼如下:
if OBJECT_ID('tempdb..#tmp') is not nulldrop table #tmp GO select distinct * into #tmp from duplicate_all where c1 = 1 GO delete duplicate_all where c1 = 1 GO insert into duplicate_all select * from #tmp
(2) 使用ROW_NUMBER復(fù)制代碼 代碼如下:
with tmp as( select *,ROW_NUMBER() OVER(PARTITION BY c1,c2,c3 ORDER BY(getdate())) as num from duplicate_all where c1 = 1 ) delete tmp where num > 1
如果多個(gè)表有完全重復(fù)的行,可以考慮通過(guò)UNION將多個(gè)表聯(lián)合,插到一個(gè)新的同結(jié)構(gòu)的表,SQL Server會(huì)幫助去掉表和表之間的重復(fù)行。
二. 刪除部分重復(fù)的記錄
部分列重復(fù)的數(shù)據(jù),通常表上是有主鍵的,可能是程序邏輯造成了多行數(shù)據(jù)列值的重復(fù)。測(cè)試數(shù)據(jù):
復(fù)制代碼 代碼如下:
if OBJECT_ID('duplicate_col') is not nulldrop table duplicate_col GO create table duplicate_col ( c1 int primary key, c2 int, c3 varchar(100) ) GO insert into duplicate_col select 1,100,'aaa' union allselect 2,100,'aaa' union allselect 3,100,'aaa' union allselect 4,100,'aaa' union allselect 5,500,'eee'GO
(1) 唯一索引
唯一索引有個(gè)忽略重復(fù)建的選項(xiàng),在創(chuàng)建主鍵約束/唯一鍵約束時(shí)都可以使用這個(gè)索引選項(xiàng)。
復(fù)制代碼 代碼如下:
if OBJECT_ID('tmp') is not nulldrop table tmp GO create table tmp ( c1 int, c2 int, c3 varchar(100), constraint UQ_01 unique(c2,c3) with(IGNORE_DUP_建設(shè)網(wǎng)站公司KEY = ON) ) GO insert into tmp select * from duplicate_col select * from tmp
(2) 借助主鍵/唯一鍵來(lái)刪除通常會(huì)選擇主鍵/唯一鍵的最大/最小值保留,其他行刪除。以下只保留重復(fù)記錄中c1最小的行。復(fù)制代碼 代碼如下:
delete from duplicate_col where exists(select 1 from duplicate_col b where duplicate_col.c1 > b.c1 and (duplicate_col.c2 = b.c2 and duplicate_col.c3 = b.c3))
聲明: 本文由我的SEOUC技術(shù)文章主頁(yè)發(fā)布于:2023-05-24 ,文章sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法建站知識(shí)主要講述標(biāo)簽,標(biāo)題,sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法建站知識(shí)網(wǎng)站建設(shè)源碼以及服務(wù)器配置搭建相關(guān)技術(shù)文章。轉(zhuǎn)載請(qǐng)保留鏈接: http://www.bifwcx.com/article/web_6710.html
為你推薦與sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法建站知識(shí)相關(guān)的文章
-
通王TWCMS 2.0.3網(wǎng)站模板程序下載
(126)人喜歡 2024-01-15 -
Windows官方原版在哪里下載
(175)人喜歡 2024-01-15 -
WordPress網(wǎng)站模板發(fā)帖標(biāo)題顏色設(shè)置
(131)人喜歡 2024-01-07 -
修改discuz論壇帖子標(biāo)題80字符的長(zhǎng)度限制
(249)人喜歡 2024-01-07 -
wordpress程序調(diào)用不帶超鏈接的Tag標(biāo)簽
(234)人喜歡 2024-01-05 -
網(wǎng)站在不同時(shí)期需調(diào)整內(nèi)容更新的方向
(112)人喜歡 2023-08-12