當前位置:首頁 » 編程語言 » sql剔除重復
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql剔除重復

發布時間: 2022-02-04 07:42:11

sql查詢去除重復記錄

select distinct(*)
from 表名
where 職業="無業"

上邊distinct 就是去除重復的關鍵字

② 如何用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 Server刪除重復行是我們最常見的操作之一,下面就為您介紹六種適合不同情況的SQL Server刪除重復行的方法,供您參考。

1.如果有ID欄位,就是具有唯一性的欄位

delect table where id not in (

select max(id) from table group by col1,col2,col3...
)
group by 子句後跟的欄位就是你用來判斷重復的條件,如只有col1,那麼只要col1欄位內容相同即表示記錄相同。

2. 如果是判斷所有欄位也可以這樣

select * into #aa from table group by id1,id2,....
delete table
insert into table
select * from #aa
3. 沒有ID的情況

select identity(int,1,1) as id,* into #temp from tabel
delect # where id not in (
select max(id) from # group by col1,col2,col3...)
delect table
inset into table(...)
select ..... from #temp
4. col1+','+col2+','...col5 聯合主鍵

select * from table where col1+','+col2+','...col5 in (
select max(col1+','+col2+','...col5) from table
where having count(*)>1
group by col1,col2,col3,col4
)
group by 子句後跟的欄位就是你用來判斷重復的條件,如只有col1,那麼只要col1欄位內容相同即表示記錄相同。

5.

select identity(int,1,1) as id,* into #temp from tabel
select * from #temp where id in (
select max(id) from #emp where having count(*)>1 group by col1,col2,col3...)
6.

select distinct * into #temp from tablename
delete tablename
go
insert tablename select * from #temp Sqlclub
go
drop table #temp
以上就是SQL Server刪除重復行的方法介紹。

④ SQL中如何刪除重復數據

select
欄位1,欄位2,欄位3
from
table
group
by
欄位1,欄位2,欄位3
having
count(*)>1
用上邊這句能找出所有重復的數據
欄位1,2,3你替換成你表裡的欄位名,如果有更多欄位的話,你就繼續添加,最後group
by的時候不要忘記了
刪除的時候要建立一個臨時表
create
table
new_table
as
select
欄位1,欄位2,欄位3
from
old_table
group
by
欄位1,欄位2,欄位3;
然後刪除原表數據
truncate
table
old_table;
然後把臨時表數據反插回去
insert
into
new_table
select
*
from
old_table;

⑤ SQL查詢中如何剔除重復

1,存在兩條完全相同的紀錄

這是最簡單的一種情況,用關鍵字distinct就可以去掉

example: select distinct * from table(表名) where (條件)

2,存在部分欄位相同的紀錄(有主鍵id即唯一鍵)

如果是這種情況的話用distinct是過濾不了的,這就要用到主鍵id的唯一性特點及group by分組

example:

select * from table where id in (select max(id) from table group by [去除重復的欄位名列表,....])

3,沒有唯一鍵ID

example:

select identity(int1,1) as id,* into newtable(臨時表) from table

select * from newtable where id in (select max(id) from newtable group by [去除重復的欄位名列表,....])

drop table newtable

(5)sql剔除重復擴展閱讀

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

select * from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

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

delete from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

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

select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

⑥ 求助SQL:如何刪除重復數據

例如:記錄雖然存在重復,但是rowid是唯一的,所以在子查詢取得重復行中最小的rowid,刪除重復行中
大於最小的rowid的行,只是保留了最小rowid的行,就是刪除了重復行。
這個語句如果要調優的話,可以在內部查詢中建索引

delete from ttt a where rowid>(select min(rowid) from ttt b where a.name=b.name);

⑦ SQL查詢,如何去除重復的記錄

首先,先說明一個問題。這樣的結果出現,說明系統設計是有問題的。

其次
刪除重復數據,你要提供你是什麼資料庫
不同資料庫會有不同的解決方案。

關鍵字Distinct 去除重復,如下列SQL,去除Test相同的記錄;
1. select distinct Test from Table
2. 如果是要刪除表中存在的重復記錄,那就邏輯處理,如下:
3. select Test from Table group by Test having count(test)>1
4. 先查詢存在重復的數據,後面根據條件刪除

還有一個更簡單的方法可以嘗試一下:
select aid, count(distinct uid) from 表名 group by aid
這是sqlserver 的寫法。

  • 如圖一在數據表中有兩個膀胱沖洗重復的記錄。

⑧ 【sql去除重復數據】

select
DISTINCT finger,width,height,size,type
form image
order by finger,width,height,size,type

⑨ SQL裡面如何刪除重復的記錄

方法1 最簡單的方法,拿出唯一的記錄集,放入中間表。原表清空,再把數據導回來。數據少的話很快。

select distinct UPPER(Stu_ID),*from tableName


方法2 如果這個表特別大,導表的方法速度受不了的話:

  1. 找出所有重復記錄

    1. select * from tableName where Stu_ID_UP in (
      select Stu_ID_UPfrom (select UPPER(Sut_ID) Stu_ID_UP from tableName)
      group by Stu_ID_UP
      having count(Stu_ID_UP) > 1)

  2. 然後人工查看一下這些數據,推測這些重復數據產生的原因,是輸入錯誤、代碼邏輯錯誤、還是業務邏輯錯誤。要是業務原因,那一定要跟業務部門談好解決方案,別刪完出狀況。

  3. 經過第2步的各種確認刪除方法後,開始刪~

保留rowid最小的記錄

delete from tableName a

where (a.Stu_ID) in (

select Stu_ID_UP

from (

select UPPER(Sut_ID) Stu_ID_UP

from tableName)

group by Stu_ID_UP

having count(Stu_ID_UP) > 1)

and rowid not in (select min(rowid)

from (select UPPER(Sut_ID) Stu_ID_UP from tableName)

group by Stu_ID_UP

having count(Stu_ID_UP) > 1)


哎這惡心的排版,這網頁裡面真難調~~~