❶ 如何使用sql語句在sqlserver中刪除重復數據
題主可 參考下列例句:
刪除表t1欄位col1有重復的記錄
delete from t1 where exists
(select 1 from (select col1 from t1 group by col1 having count(1)>1) t where t.col1=t1.col1);
如果希望對於有重復的記錄希望保留其中一條記錄而不是全部刪除,則可以運行下列語句,前提是數據表必須含有自增id列。
delete from t1 where exists
(select 1 from (select col1,max(id) as id from t1 group by col1 having count(1)>1) t where t.col1=t1.col1 and t.id<>t1.id);
❷ 如何用SQL語句去掉重復記錄
COL1 中有重復記錄(COL1,COL2為主鍵),如何刪除
1、有少數重復記錄(在col1,col2上有索引比較好)
DELETE T
WHERE (COL1,COL2) IN
(SELECT COL1,COL2 FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)
AND
ROWID NOT IN
(SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)
2、大部份記錄有重復記錄
DELETE T WHERE ROWID NOT IN
(SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2)
3、其他寫法
DELETE T WHERE ROWID IN
(SELECT A.ROWID FROM T A,T B
WHERE A.COL1=B.COL1 AND A.COL2 = B.COL2 AND A.ROWID > B.ROWID)
######################################
10. 刪除重復記錄
最高效的刪除重復記錄方法 ( 因為使用了ROWID)
DELETE FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM EMP X
WHERE X.EMP_NO = E.EMP_NO);
11. 用TRUNCATE替代DELETE
當刪除表中的記錄時,在通常情況下, 回滾段(rollback segments ) 用來存放可以被恢復的信息. 如果你沒有COMMIT事務,ORACLE會將數據恢復到刪除之前的狀態(准確地說是
恢復到執行刪除命令之前的狀況)
而當運用TRUNCATE時, 回滾段不再存放任何可被恢復的信息.當命令運行後,數據不能被恢復.因此很少的資源被調用,執行時間也會很短.
(譯者按: TRUNCATE只在刪除全表適用,TRUNCATE是DDL不是DML)
12. 盡量多使用COMMIT
只要有可能,在程序中盡量多使用COMMIT, 這樣程序的性能得到提高,需求也會因為COMMIT所釋放的資源而減少:
COMMIT所釋放的資源:
a. 回滾段上用於恢復數據的信息.
b. 被程序語句獲得的鎖
c. redo log buffer 中的空間
d. ORACLE為管理上述3種資源中的內部花費
❸ sql資料庫 有多條記錄完全重復,怎麼刪除重復記錄,只保留一條,sql語句怎麼寫
如果只是要查詢不是重復的記錄的話
select distinct * from 表
如果是將多餘的重復記錄刪除
首先將不是重復的數據提取出來,保存到一個臨時表中
select distinct * into #temp from 表
然後刪除原來的表
delete from 表
最後往裡面插入臨時表的數據
insert into 表
select * from #temp
❹ SQL語句刪除重復記錄
delete from tb
where tb.field in
(select a.field from tb a,tb b
where a.rownum > b.rownum
&& a.filed = b.field) c
c表檢索的就是有重復欄位的
❺ sql查詢去掉重復記錄
1、打開要去掉重復數據的資料庫,這里新建一張含有重復數據的user表做示例,如下圖所示:
❻ SQL語句刪除重復的記錄
刪除重復的數據
delete from tb where id not in (
select id from
(select fileSize,fileName ,max(id) id from tb group by filesize,filename ) a
)
現在完成了重復數據的刪除,主要是利用了找出某個分組中最大的那個id,其中包括了所有不重復的id,然後使用not in將需要保留的排除。
❼ sql語句刪除重復記錄求教 謝謝~
delete from test where guid not in (select min(guid) from test group by id,follower)
這個是保留其他相同,guid最小的那條,當然你也可以把min改成max,保留guid最大的那條
----------補充-----------
delete from test where cast(guid as varchar(255)) not in (select min(cast(guid as varchar(255))) from test group by id,follower)
這樣,把guid轉成字元再刪
❽ SQL語句,刪除重復記錄。
如果按題目那個樣子,這個表只有一個欄位的話樓上的解答應該是合要求的吧。就是選出來存在一個臨時表裡然後再填回去:
select
distinct
test_name
into
#Tmp
from
test1
drop
table
test1
select
*
into
test1
from
#Tmp
drop
table
#Tmp
但是如果按正常的情況下這個表總會有個主鍵什麼的吧?比如說是有個自增的ID欄位。這種情況下就可以:
delete
test1
where
ID
not
in
(select
ID
from
test1
group
by
test_name)
❾ sql語句刪除重復的記錄
delete
from
Table_
where
欄位
in
(
--得到有重復記錄begin
select
欄位
from
(
select
欄位,
count(*)
as
c
from
Table_
group
by
欄位
)
a
where
c>0
--得到有重復記錄end
)
--不知道是不是你想要的答案.