表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 维修单号 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的这条记录删除。
delete from T_CLWXB a where not exists (select 1 from T_WXBJB t where t.维修单号 = a.维修单号)
我具体说说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先执行主查询。