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

資料庫中刪除重復數據

發布時間: 2022-12-11 22:10:46

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;

(1)資料庫中刪除重復數據擴展閱讀:

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

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

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

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

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

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

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

示例

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

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

表中數據如圖:

*fromProcts_tempdroptableProcts_temp


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

㈢ 資料庫怎麼刪除相同的內容

查詢及刪除重復記錄的SQL語句
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、查找表中多餘的重復記錄(多個欄位);

㈣ mysql,sqlserver資料庫去重

b. 方法:
☆根據dname分組,查找出deptno最小的。然後再查找deptno不包含剛才查出來的。這樣就查詢出了所有的重復數據(除了deptno最小的那行)

方法2

刪除重復的行

單個欄位的如果會了,多個欄位也非常簡單。就是將group by 的欄位增加為你想要的即可。

此處只寫一個,其他方法請仿照一個欄位的寫即可。

查詢結果不含指定欄位重復

2.表需要刪除重復的記錄(重復記錄保留1條),

3.查詢重復

4.1、查找表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷

4.2、刪除表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷,只留有rowid最小的記錄

4.3、查找表中多餘的重復記錄(多個欄位)

4.4、刪除表中多餘的重復記錄(多個欄位),只留有rowid最小的記錄

4.5、查找表中多餘的重復記錄(多個欄位),不包含rowid最小的記錄

4.6.消除一個欄位的左邊的第一位:

4.7.消除一個欄位的右邊的第一位:

4.8.假刪除表中多餘的重復記錄(多個欄位),不包含rowid最小的記錄

查詢重復

㈤ 怎麼樣刪除SQL SERVER 資料庫中重復的數據

1、必須保證表中有主鍵或者唯一索引,或者某列數據不能重復。只有這樣,才可能使用一句SQL來實現。否則只能考慮其它辦法。下面的語句,假定BB列是不重復的,刪除後保存BB列值最大的那條記錄。
delete
from

where
aa
in
(select
aa
from

group
by
aa
having
count(aa)
>
1)
and
bb
not
in
(select
max(bb)
from

group
by
aa
having
count(aa)
>
1);
2、有多種寫法:
delete
A
from
B
where
A.AA
=
B.AA
delete
A
from
A,B
where
A.AA
=
B.AA
delete
A
where
AA
in
(select
AA
from
B)
3、使用into關鍵字:
select
*
into
新表名
from
原表
4、取數據前3位,欄位必須是類似char類型,使用類似substring這樣的函數(SYBASE是substring,ORACLE是substr):
select
substring(欄位,1,3)
from
表名

㈥ 如何刪除資料庫中的重復記錄

select
distinct
*
from
表名
distinct
表示去除重復項,必須放到列欄位的前面。

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

方法一

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子句中省去此列)

㈧ Oracle資料庫重復數據刪除的幾種方法

重復的數據可能有這樣兩種情況,第一種時表中只有某些欄位一樣,第二種是兩行記錄完全一樣。Oracle資料庫重復數據刪除技術有如下優勢:更大的備份容量、數據能得到持續驗證、有更高的數據恢復服務水平、方便實現備份數據的容災。
一、刪除部分欄位重復數據先來談談如何查詢重復的數據吧。
下面語句可以查詢出那些數據是重復的:
select
欄位1,欄位2,count(*)
from
表名
group
by
欄位1,欄位2
having
count(*)
>
1
將上面的>號改為=號就可以查詢出沒有重復的數據了。
想要刪除這些重復的數據,可以使用下面語句進行刪除
delete
from
表名
a
where
欄位1,欄位2
in
(select
欄位1,欄位2,count(*)
from
表名
group
by
欄位1,欄位2
having
count(*)
>
1)
上面的語句非常簡單,就是將查詢到的數據刪除掉。不過這種刪除執行的效率非常低,對於大數據量來說,可能會將資料庫弔死。所以我建議先將查詢到的重復的數據插入到一個臨時表中,然後對進行刪除,這樣,執行刪除的時候就不用再進行一次查詢了。如下:
CREATE
TABLE
臨時表
AS
(select
欄位1,欄位2,count(*)
from
表名
group
by
欄位1,欄位2
having
count(*)
>
1)
上面這句話就是建立了臨時表,並將查詢到的數據插入其中。
下面就可以進行這樣的刪除操作了:
delete
from
表名
a
where
欄位1,欄位2
in
(select
欄位1,欄位2
from
臨時表);
這種先建臨時表再進行刪除的操作要比直接用一條語句進行刪除要高效得多。
這個時候,大家可能會跳出來說,什麼?你叫我

㈨ sql刪除重復數據且只保留一條

在你的查詢sql裡面將子查詢的title改成id,外面用id in(),這樣會得到去重後的數據導出insert語句,將表中數據備份刪除,再將導出的sql執行一下即可,還有一種就是寫刪除sql,delete from table where id not in(select id from table group by title )。

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

法一:
用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);