oracle not in的时候查不出来数据,以一张表中的一个字段为条件,判断不在另一张表中的某个字段集合中查不出来数据


查询a表的数据,但是a表的id不等于b表的id的值,如果b表存在id为null的值,就会出现查询不到数据的情况;

创建表a:

create table a (

id number(10),
name varchar2(20)

);


创建表b:

create table b (
id number(10),
name varchar2(20)
);


插入a表数据,其中两条和b不同:

insert into a values(1,'张三');
insert into a values(2,'李四');
insert into a values(3,'王五');
insert into a values(4,'赵六');
insert into a values(5,'王二');
insert into a values(6,'王五');
insert into a values(7,'王玖');


插入b表数据,其中一条id为null:

insert into b values(1,'张三');
insert into b values(2,'李四');
insert into b values(3,'王五');
insert into b values(4,'赵六');
insert into b values(5,'王二');
insert into b (name) values('王二');


查询a表的数据,但是a表的id不等于b表的id的值;

1.直接查 :

select * from a where id not in(select id from b )

返回的是null,没有数据显示

2.排掉b表id为null 的数据:

select * from a where id not in(select id from b where id is not null)

可以正常查出id等于6和7的数据;


如果查询条件存在为null的情况,用not in或者in  就会出现查询不出数据;


猜你喜欢

转载自blog.csdn.net/xiachaoyang/article/details/80832724