Oracle 通过一个表的几个字段删除另一个表的数据

1 创建表结构 test1 

create table test1(  id varchar2(10) ,  val varchar2(20),  name varchar2(20)); 

2 创建表结构 test12

create table test2(  id varchar2(10),  val varchar2(20) ,  name varchar2(20) );

3 添加数据

insert into test1 values ('1','1111','77');
insert into test1 values ('2','222vs','7538');  
insert into test1 values ('2','2222sdf','dg');    
insert into test1 values ('3','33sdf33','dgd');  
insert into test1 values ('4','44d44','dgdfg');
insert into test1 values ('6','66dgd66','hhfg');
commit;  
insert into test2 values ('1','aa332aa','77');
insert into test2 values ('2','bb34b3b','7538');      
insert into test2 values ('3','c34ccc','835'); 
insert into test2 values ('4','dd34dd','3255');
insert into test2 values ('5','ee34e','596666');
commit; 

4 删除test2中在test1中存在的数据 通过ID,NAME  两列判断 现在test2中和test1 中重复的数据有两条

 4.1Oracle 通过一个表的几个字段删除另一个表的数据_第1张图片   4.2  Oracle 通过一个表的几个字段删除另一个表的数据_第2张图片

nvl(test2.id,'@')  的作用是将test2.id 值为null值转换成'@' 进行对比。Oracle 中默认 null值和null值不相等。

 DELETE FROM test2 WHERE EXISTS(SELECT 1 FROM test1 b WHERE 
  nvl(test2.id,'@')=nvl(b.id,'@') and  nvl(test2.name,'@')=nvl(b.name,'@'));

 

5 删除后的结果 

5.1 Oracle 通过一个表的几个字段删除另一个表的数据_第3张图片  5.2 Oracle 通过一个表的几个字段删除另一个表的数据_第4张图片

6 完成通过一个表的多个字段删除另一个表。
 

你可能感兴趣的:(Oracle)