update,delete与INNER JOIN 以及删除重复数据

  最近又有新东东上来啦,哈哈!虽然都是些遇到的一些小问题,不过我觉得还是应该记录在此,以备不时之需,呵 ~~~~

一、原来只知道update是可以有inner join ,前几天搞到一个相关东西的时候才知道原来delete也是有inner join .现将两种相关的语法陈列如下,有需要的朋友可以瞄瞄,~~~~~

SQL:

UPDATE

update a

set a.employeestrid=b.pressworkid

from cemployee a inner join ccard b on a.cardid=b.cardid  --其实这个大多都知道的,呵~在这里啰嗦了点,嘻嘻~~~

DELETE

    Delete from econsumedata from econsumedata inner join ccard on econsumedata.cardid=ccard.cardid

 

我们再讲一下删除重复数据的事情,呵~~~其实删除重复数据我一般就使用两种模式。

1、   要最简单,就是先把不重复的查询出来,将不重复的数据先存到临时表里,再将正式表的数据全部删除掉,再使用select insert进行数据的插入,当然这咱情况只适用于数据可以停止下来。

2、   我们经常使用的数据库可能需要你长时间的都在运营,所以前面那种方法就不再可行了,那就需要你直接运行SQL语句,对实际情况进行分析后进行删除,一般我们遇到的重复数据都是大多栏位一样,总会有一个栏们不一样这样的重复数据,请找到这个不一样的栏位,作为一个标志物,再进行利用完成删除重复数据的工作。

E.G.

select deviceid,recordid,cardid,cardvalue,usecount,consumemoney,count(cardid) as card,max(consumedate) as data into #temp1 from econsumedata

where convert(char(10),consumedate,21) between '2006-01-01' and '2007-12-31'

group by deviceid,recordid,cardid,cardvalue,usecount,consumemoney

having count(cardid)>1

order by cardid,usecount        --将相应的不重复的数据查询出来,这里因为其标志本栏位是时间,所以我取了这些重复数据中拥有最大时间的一笔作为正确的数据查询出来放到临时表。

go

delete A from econsumedata A

inner join #temp1 B on A.deviceid=B.deviceid and A.recordid=B.recordid

and A.cardid=B.cardid and A.cardvalue=B.cardvalue and A.usecount=B.usecount

and A.consumemoney=B.consumemoney and A.consumedate<>B.data

--(最后的此条件,如若改成=则表示的是留下来的是这个临时表的那一笔数据,可实现巧妙转换)

--利用临时表进行以前我们前面所讲到的delete inner join (删除时利用表间关联)来完成删除重复数据的功能.

go

drop table #temp1

转载于:https://www.cnblogs.com/medci/archive/2009/10/19/1586115.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值