sqlserver delete 删除两个表的差集

merge t_kp t using (select id from t_kp except select kid from T_KPItem)s on t.id=s.id when matched then delete;

merge , except 是sql 2008 版本以上才有的

except 是找出两个表的差集

这样的操作用于清理表中的孤立数据,t_kp是主表,t_kpitem是子表 关联是 t_kp.id=t_kpitem.kid
当t_kp.id 在t_kpitem中不存在时,就在主表中出现的孤立数据,这部分数据在有的业务逻辑中是无用的垃圾数据,需要清理,就用上述的语句,据说比delete ….not in 效率要高,没测试过。

你可能感兴趣的:(数据库)