當前位置:首頁 » 數據倉庫 » 資料庫去除重復數據
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫去除重復數據

發布時間: 2022-04-23 15:20:48

sql資料庫刪除重復記錄

delete from table where id not in

select min(id) from table group by name,url(如果有其他行辨別那麼也在這里加上)
我保留的是id最小的行,你也可以留最大的行
我沒辦法加括弧,寫了子查詢加了括弧就發不上來

Ⅱ 如何提取出並刪除資料庫中重復的記錄

我也想知道,於是找了下,一起看看吧
1、查找表中多餘的重復記錄,重復記錄是根據單個欄位(Id)來判斷
select
*
from

where
Id
in
(select
Id
from

group
byId
having
count(Id)
>
1)
2、刪除表中多餘的重復記錄,重復記錄是根據單個欄位(Id)來判斷,只留有rowid最小的記錄
DELETE
from

WHERE
(id)
IN
(
SELECT
id
FROM

GROUP
BY
id
HAVING
COUNT(id)
>
1)
AND
ROWID
NOT
IN
(SELECT
MIN(ROWID)
FROM

GROUP
BY
id
HAVING
COUNT(*)
>
1);
3、查找表中多餘的重復記錄(多個欄位)
select
*
from

a
where
(a.Id,a.seq)
in(select
Id,seq
from

group
by
Id,seq
having
count(*)
>
1)
4、刪除表中多餘的重復記錄(多個欄位),只留有rowid最小的記錄
delete
from

a
where
(a.Id,a.seq)
in
(select
Id,seq
from

group
by
Id,seq
having
count(*)
>
1)
and
rowid
not
in
(select
min(rowid)
from

group
by
Id,seq
having
count(*)>1)
5、查找表中多餘的重復記錄(多個欄位),不包含rowid最小的記錄
select
*
from

a
where
(a.Id,a.seq)
in
(select
Id,seq
from

group
by
Id,seq
having
count(*)
>
1)
and
rowid
not
in
(select
min(rowid)
from

group
by
Id,seq
having
count(*)>1)

Ⅲ 刪除資料庫中重復數據的幾個方法

方法一

declare @max integer,@id integer
declare cur_rows cursor local for select 主欄位,count(*) from 表名 group by 主欄位 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主欄位 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0

方法二

有兩個意義上的重復記錄,一是完全重復的記錄,也即所有欄位均重復的記錄,二是部分關鍵欄位重復的記錄,比如Name欄位重復,而其他欄位不一定重復或都重復可以忽略。

1、對於第一種重復,比較容易解決,使用 select distinct * from tableName 就可以得到無重復記錄的結果集。
如果該表需要刪除重復的記錄(重復記錄保留1條),可以按以下方法刪除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

發生這種重復的原因是表設計不周產生的,增加唯一索引列即可解決。

2、這類重復問題通常要求保留重復記錄中的第一條記錄,操作方法如下:

假設有重復的欄位為Name,Address,要求得到這兩個欄位唯一的結果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最後一個select即得到了Name,Address不重復的結果集(但多了一個autoID欄位,實際寫時可以寫在select子句中省去此列)

Ⅳ 如何查找和刪除資料庫中的重復數據

法一:
用Group
by語句
此查找很快的select
count(num),
max(name)
from
student
–查找表中num列重復的,列出重復的記錄數,並列出他的name屬性group
by
numhaving
count(num)
>;1
–按num分組後找出表中num列重復,即出現次數大於一次delete
from
student(上面Select的)這樣的話就把所有重復的都刪除了。—–慎重法二:當表比較大(例如10萬條以上)時,這個方法的效率之差令人無法忍受,需要另想辦法:—-
執行下面SQL語句後就可以顯示所有DRAWING和DSNO相同且重復的記錄SELECT
*
FROM
EM5_PIPE_PREFABWHERE
ROWID!=(SELECT
MAX(ROWID)
FROM
EM5_PIPE_PREFAB
D
–D相當於First,SecondWHERE
EM5_PIPE_PREFAB.DRAWING=D.DRAWING
ANDEM5_PIPE_PREFAB.DSNO=D.DSNO);—-
執行下面SQL語句後就可以刪除所有DRAWING和DSNO相同且重復的記錄DELETE
FROM
EM5_PIPE_PREFABWHERE
ROWID!=(SELECT
MAX(ROWID)
FROM
EM5_PIPE_PREFAB
DWHERE
EM5_PIPE_PREFAB.DRAWING=D.DRAWING
ANDEM5_PIPE_PREFAB.DSNO=D.DSNO);法一:
用Group
by語句
此查找很快的select
count(num),
max(name)
from
student
–查找表中num列重復的,列出重復的記錄數,並列出他的name屬性group
by
numhaving
count(num)
>;1
–按num分組後找出表中num列重復,即出現次數大於一次delete
from
student(上面Select的)這樣的話就把所有重復的都刪除了。—–慎重法二:當表比較大(例如10萬條以上)時,這個方法的效率之差令人無法忍受,需要另想辦法:—-
執行下面SQL語句後就可以顯示所有DRAWING和DSNO相同且重復的記錄SELECT
*
FROM
EM5_PIPE_PREFABWHERE
ROWID!=(SELECT
MAX(ROWID)
FROM
EM5_PIPE_PREFAB
D
–D相當於First,SecondWHERE
EM5_PIPE_PREFAB.DRAWING=D.DRAWING
ANDEM5_PIPE_PREFAB.DSNO=D.DSNO);—-
執行下面SQL語句後就可以刪除所有DRAWING和DSNO相同且重復的記錄DELETE
FROM
EM5_PIPE_PREFABWHERE
ROWID!=(SELECT
MAX(ROWID)
FROM
EM5_PIPE_PREFAB
DWHERE
EM5_PIPE_PREFAB.DRAWING=D.DRAWING
ANDEM5_PIPE_PREFAB.DSNO=D.DSNO);

Ⅳ sql資料庫中出現重復行數據,如何刪除這些重復記錄

示例

假設存在一個產品信息表Procts,其表結構如下:

CREATETABLEProcts(
ProctIDint,
ProctNamenvarchar(40),
Unitchar(2),
UnitPricemoney
)

表中數據如圖:

*fromProcts_tempdroptableProcts_temp


這樣就完成了對表中重復記錄的刪除。無論表有多大,它的執行速度都是相當快的,而且因為幾乎不用寫語句,所以它也是很安全的

Ⅵ sql中如何刪除一個表中重復的記錄

sql中刪除一個表中的重復記錄可以採用如下步驟:

1、把a_dist表的記錄用distinct去重,結果放到臨時表中。

select distinct * into #temp from a_dist;

2、把a_dist表的記錄全部刪除。

delete from a_dist;

3、把臨時表中的數據信息導進到a_dist表中,並刪除臨時表。

insert into a_distselect * from #temp;

drop table #temp;

(6)資料庫去除重復數據擴展閱讀:

SQL (結構化查詢語言)是用於執行查詢的語法。在資料庫上執行的大部分工作都由 SQL 語句完成。SQL 語言包含用於更新、插入和刪除記錄的語法。

增刪改查指令構成了 SQL 的 DML 部分:

  • SELECT- 從資料庫表中獲取數據

  • UPDATE- 更新資料庫表中的數據

  • DELETE- 從資料庫表中刪除數據

  • INSERT INTO- 向資料庫表中插入數據

Ⅶ 資料庫中怎麼刪除重復的記錄,只保留唯一的記錄

方法很多,說一個最簡單的。
先建一個表,結構和原來的表一樣,但是在你要去重的列建立一個主鍵,並設置「忽略重復鍵」,把原表中的所有數據插入這個新表,
此時新表中的數據就已經是非重復的了。
把原表數據都刪掉,把新表中的數據都導回來就ok了

Ⅷ 如何刪除資料庫中的重復數據

有兩個意義上的重復記錄

①完全重復的記錄,也即所有欄位均重復的記錄。

②部分關鍵欄位重復的記錄,比如Name欄位重復,而其他欄位不一定重復或都重復可以忽略。


1、對於第一種重復,比較容易解決,使用

selectdistinct*fromtableName


這樣就可以得到無重復記錄的結果集。然後通過臨時表實現對數據的維護。

selectdistinct*into#TmpfromtableName
droptabletableName
select*intotableNamefrom#Tmp
droptable#Tmp

#Tmp為什麼系統參數,tableName為要操作的表名。


2、第二類重復問題通常要求保留重復記錄中的第一條記錄,操作方法如下:

假設有重復的欄位為Name,Address,要求得到這兩個欄位唯一的結果集

selectidentity(int,1,1)asautoID,*into#TmpfromtableName
selectmin(autoID)asautoIDinto#Tmp2from#TmpgroupbyName,autoID
select*from#TmpwhereautoIDin(selectautoIDfrom#tmp2)

最後一個select即得到了Name,Address不重復的結果集(但多了一個autoID欄位,實際寫時可以寫在select子句中省去此列)

Ⅸ oracle資料庫怎麼刪除重復數據啊

用這種效率最高的就可以
比如,某個表要按照id和name重復,就算重復數據
delete from 表名 where rowid not in (select min(rowid) from 表名 group by id,name);
commit;如果以id,name和grade重復算作重復數據
delete from 表名 where rowid not in (select min(rowid) from 表名 group by id,name,grade);
commit;注意:min也可用max替代

Ⅹ 關於刪除SQL資料庫表裡重復數據的問題

1、把不重復的數據轉存到臨時表
select
name,time,min(id)
into
#tmp
from
表名
group
by
name,time;
2、清空原表
truncate
table
表名;
3、把數據導回
insert
itno
表名
select
*
from
#tmp;
4、刪除臨時表
drop
table
#tmp;
---
以上,希望對你有所幫助。