如何删除掉AB表之间不符合的
A                B
---------------- -----
A                A
B                B
C                
D                D
E                E
F              
H               
I
我要得到的是删除A表中的C ,F,H,I等行
得到A表纪录数是和B表一样的结果。如何写SQL呢??不能做清空A表然后COPY B表,因为我A,B里面有很多其他字端不一样的情况。
我只希望依据B的这个字端来判断A里面有哪些是不需要的,然后删除掉就可以了。
请问各位我应该怎么做

解决方案 »

  1.   

    delete from table_a where a not in
    (select b from table_b where b is not null);
      

  2.   

    或者
    delete from table_a where  not exists
    (select 1 from b where table_b.b=table_a.a);
      

  3.   

    那如果我还有一些情况要判断呢,比如,现在我需要判断的就有2个情况可以认为是相同的。
    table_a.a=rtrim(table_b.b) 和table_a.a=replace(table_b.b,'b'),那应该如何写SQL?
      

  4.   

    需要的判断都加在后面的not exists里面:
    delete from table_a where  not exists
    (select 1 from b where table_b.b=table_a.a or table_a.a=rtrim(table_b.b)
     or table_a.a=replace(table_b.b,'b'));
      

  5.   

    我先去试一下~谢谢!
    之前我一些判断,在WHERE后面,总说我返回多与一个值,好郁闷。