NOT IN 乱像(子查询建议使用 NOT EXISTS 代替 NOT IN)

举个例子:

如下图:

NOT IN 乱像(子查询建议使用 NOT EXISTS 代替 NOT IN)_第1张图片

A、B 表的数据如上图所示,

语句:

SELECT A.ID FROM A WHERE AID NOT IN (SELECT ID FROM B);

该语句的结果集,由于 B 表中空值(oracle:空字符串或者null;mysql:null值),将永远为空,无论 A 表的数据是什么样子。

有些时候,这可能与我们设想的逻辑不符。

建议自子查询的时候,尽量使用 not exists,既可以保证效率,又可以防止子查询中有空值(oracle:空字符串或者null;mysql:null值)

 

下面将介绍Mysql与Oracle的子查询中 使用 NOT IN 的区别

mysql结果如图:

NOT IN 乱像(子查询建议使用 NOT EXISTS 代替 NOT IN)_第2张图片

oracle如下图:

NOT IN 乱像(子查询建议使用 NOT EXISTS 代替 NOT IN)_第3张图片

 

 

 

 

 

 

你可能感兴趣的:(NOT IN 乱像(子查询建议使用 NOT EXISTS 代替 NOT IN))