首页 > 开发 > 综合 > 正文

sql语句去除重复记录(多表连接的查询)

2024-07-21 02:48:13
字体:
来源:转载
供稿:网友
sql语句去除重复记录(多表连接的查询)--处理表重复记录(查询和删除)/******************************************************************************************************************************************************1、Num、Name相同的重复值记录,没有大小关系只保留一条2、Name相同,ID有大小关系时,保留大或小其中一个记录******************************************************************************************************************************************************/--1、用于查询重复处理记录(如果列没有大小关系时2000用生成自增列和临时表处理,SQL2005用row_number函数处理)-->-->生成測試數據ifnotobject_id('Tempdb..#T')isnulldroptable#TGoCreatetable#T([ID]int,[Name]nvarchar(1),[Memo]nvarchar(2))Insert#Tselect1,N'A',N'A1'unionallselect2,N'A',N'A2'unionallselect3,N'A',N'A3'unionallselect4,N'B',N'B1'unionallselect5,N'B',N'B2'Go--I、Name相同ID最小的记录(推荐用1,2,3),方法3在SQl05时,效率高于1、2方法1:Select*from#Tawherenotexists(select1from#TwhereName=a.NameandID<a.ID)方法2:selecta.*from#Tajoin(selectmin(ID)ID,Namefrom#TgroupbyName)bona.Name=b.Nameanda.ID=b.ID方法3:select*from#TawhereID=(selectmin(ID)from#TwhereName=a.Name)方法4:selecta.*from#Tajoin#Tbona.Name=b.Nameanda.ID>=b.IDgroupbya.ID,a.Name,a.Memohavingcount(1)=1方法5:select*from#TagroupbyID,Name,MemohavingID=(selectmin(ID)from#TwhereName=a.Name)方法6:select*from#Tawhere(selectcount(1)from#TwhereName=a.NameandID<a.ID)=0方法7:select*from#TawhereID=(selecttop1IDfrom#TwhereName=a.nameorderbyID)方法8:select*from

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表