表1         车辆维修表 英文名称: T_CLWXB
序号 字段中文名称 字段名称 类型 长度 是否为空 主键 备注
1 维修单号 WXDH     varchar2 (20) not null, PK
2 申请人ID SQRID     varchar2 (11) not null,
3 申请人名称 SQRMC     varchar2 (30) , 表 2 维修报价表 英文名称: T_WXBJB
序号 字段中文名称 字段名称 类型 长度 是否为空 主键 备注
1 维修单号 WXDH varchar2 (20) not null, PK
2 报价序号 BJXH Number (3) not null, PK
3 单位ID DWID varchar2 (11) not null,
4 维修厂ID WXCID varchar2 (3) not null,
5 维修厂负责人 WXCFZR varchar2 (30)
比较表1和表2的维修单号,如果表1中的维修单号跟表2的不同,就将表1的这条记录删除。

解决方案 »

  1.   

    delete from  表1 a  where a.维修单号 not in (select b.维修单号 from 表2 b)  
      

  2.   


    delete from T_CLWXB a where not exists (select 1 from T_WXBJB t where t.维修单号 = a.维修单号) 
      

  3.   

    1,2楼回答都可以实现
    我具体说说in和exists在什么情况下用,用的楼主的做案例
    如果表1数据量大,而表2数据量小
    那么可以用
    delete from 表1 a where a.维修单号 not in (select b.维修单号 from 表2 b) 
    反之,如果表1数据量小,而表2数据量大
    delete from 表1 a where  not exists (select 1 from 表2  where a.维修单号 =b.维修单号)
    其实说明白点就是in先执行子查询,而exists先执行主查询。