亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除SQL Server中的重復記錄?

刪除SQL Server中的重復記錄?

函數式編程 2019-09-20 17:08:29
考慮一個名為EmployeeNametable 的列Employee。目標是根據EmployeeName字段刪除重復記錄。EmployeeName------------AnandAnandAnilDipakAnilDipakDipakAnil使用一個查詢,我想刪除重復的記錄。如何在SQL Server中使用TSQL?
查看完整描述

3 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

您可以使用窗口功能執行此操作。它將通過empId命令dupes,并刪除除第一個之外的所有。


delete x from (

  select *, rn=row_number() over (partition by EmployeeName order by empId)

  from Employee 

) x

where rn > 1;

將其作為選擇運行以查看將刪除的內容:


select *

from (

  select *, rn=row_number() over (partition by EmployeeName order by empId)

  from Employee 

) x

where rn > 1;


查看完整回答
反對 回復 2019-09-20
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

假設您的Employee表也有一個唯一列(ID在下面的示例中),以下內容將起作用:


delete from Employee 

where ID not in

(

    select min(ID)

    from Employee 

    group by EmployeeName 

);

這將使表中具有最低ID的版本保留。


編輯

Re McGyver的評論 - 截至SQL 2012


MIN 可以與numeric,char,varchar,uniqueidentifier或datetime列一起使用,但不能與位列一起使用


對于2008 R2及更早版本,


MIN可以與numeric,char,varchar或datetime列一起使用,但不能與位列一起使用(它也不能與GUID一起使用)


對于2008R2,您需要將其GUID轉換為支持的類型MIN,例如


delete from GuidEmployees

where CAST(ID AS binary(16)) not in

(

    select min(CAST(ID AS binary(16)))

    from GuidEmployees

    group by EmployeeName 

);


查看完整回答
反對 回復 2019-09-20
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

您可以嘗試以下內容:


delete T1

from MyTable T1, MyTable T2

where T1.dupField = T2.dupField

and T1.uniqueField > T2.uniqueField  

(這假設您有一個基于整數的唯一字段)


雖然我個人說你最好試圖糾正重復條目在發生之前被添加到數據庫而不是作為post-it操作的事實。


查看完整回答
反對 回復 2019-09-20
  • 3 回答
  • 0 關注
  • 591 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號