日期:2014-05-17  浏览次数:20398 次

问一个比较复杂点的语句,帮下忙
有两张表,一张人员表,一张卡号表,人员表里每一个人对应卡号表里的一个或多个卡号,有没有办法删除卡号表里多余的数据使每一个人对应一个卡号,人对应多个卡号的随便保留一个就可以了,请问下这个语句怎么写?触发器什么的都可以,谢谢呀。

------解决方案--------------------
delete a
from (select *,Row_number()over(partition by 人员ID order by 卡号) as Row from 卡号表)as a
where Row>1

------解决方案--------------------
参考http://bbs.csdn.net/topics/240034273
------解决方案--------------------


delete a
from 卡号表 as a
where exists(select 1 from 卡号表 where 人员ID=a.人员ID and ID>a.ID)--ID为表的唯一列如:卡号

------解决方案--------------------
;with cte as
(select *,row_number() over(partition by uid order by cardno) as rn from cards )
delete from cte where rn>1