1. 程式人生 > >NOT IN 亂像(子查詢建議使用 NOT EXISTS 代替 NOT IN)

NOT IN 亂像(子查詢建議使用 NOT EXISTS 代替 NOT IN)

舉個例子:

如下圖:

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結果如圖:

oracle如下圖: