1. A表重复数据 都 在B表中有关联-> 删除A.id较大的一个表B 中的数据,怎么处理?

解决方案 »

  1.   

    1. A表重复数据 都 在B表中有关联-> 删除A.id较大的一个
    2. A表重复数据  在B表中都没有关联-> 删除A.id较大的一个
    3.A表重复数据 有一笔 在B表中有关联-> 删除A表中没有关联的哪一个看你这个描叙,相同的记录最多只有2条吗?
      

  2.   

    A:
    id    name   address  
    1     zs     aaa
    2     zs     aaa    //重复
    3     sm     bbb    //重复,在B表中无关联
    4     sm     bbb    
    5     lr  ccc
    6     lr     ccc    //重复,在B表中无关联
    7     ms     ddd
    8     xd     eeeB:
    id  fid  other
    1   1     yyy    //情况1
    2   2     yyy    //情况1
    3   4     zzz    //情况3
    4   7     uuu
    需要过滤的A表数据为
    2,3,6
    B表不管
      

  3.   

    DECLARE @a TABLE(id INT,c1 VARCHAR(10))INSERT INTO @a SELECT 1,'a' UNION ALL 
    SELECT 2,'a' UNION ALL 
    SELECT 3,'a' UNION ALL 
    SELECT 4,'b' UNION ALL 
    SELECT 5,'b' UNION ALL
    SELECT 6,'c' UNION ALL 
    SELECT 7,'c';DECLARE @b TABLE(fid int)
    INSERT INTO @b(fid) VALUES(2),(4),(5);DELETE FROM @a WHERE id NOT IN (
    SELECT MIN(id) AS id FROM  @a WHERE id IN (SELECT fid FROM @b)
    GROUP BY c1
    UNION ALL 
    SELECT MIN(id) FROM @a a WHERE NOT EXISTS(SELECT 1 FROM @a x WHERE a.c1=x.c1 AND x.id IN (SELECT fid FROM @b))
    GROUP BY a.c1
    );
    SELECT * FROM @a;/*
    id          c1
    ----------- ----------
    2           a
    4           b
    6           c
    */
      

  4.   


     
      begin tran
      delete a 
      where id not in  (select id from 
      (select a.id,b.fid as id1 , name,a.address ,ROW_NUMBER()over(PARTITION by name,address order by 
       b.fid desc ,a.id desc ) as n from a left join b on a.id=b.fid) as t
       where n=1 )
         select * from a
    id          name address
    ----------- ---- -------
    2           zs   aaa
    4           sm   bbb
    6           lr   ccc
    7           ms   ddd
    8           xd   eee(5 行受影响)
    --结果  
      

  5.   

    非常感谢7,8楼的支持,整理好了: )
    PS:8楼的答案删除的是ID较小的一个, 不知是否是受排序影响? 不过功能实现了再次感谢2位高人