Oracle表的常用查询实验(六)
1.问题描述:
为什么第一个SQL没有数据,第二个SQL有数据?
SQL1:
SELECT t.*
FROM alx_material_types_intf_v t
WHERE t.material_level = 3
AND t.material_type NOT IN
(SELECT a.parent_type FROM alx_material_types_intf_v a); --无数据
SQL2:
SELECT t.*
FROM alx_material_types_intf_v t
WHERE t.material_level = 3
AND t.material_type NOT IN
(SELECT a.parent_type FROM alx_material_types_intf_v a WHERE a.parent_type = t.material_type); --有数据
2.需求分析:
对比两个SQL语句,区别在于第二个SQL语句多出了‘WHERE a.parent_type = t.material_type’。
3.解答过程:
第一句SQL的子查询SELECT a.parent_type FROM alx_material_types_intf_v a中parent_type有空值的话,not in (null)的结果是null,不是true。所以没有数据、
第二个SQL里面,因为多了个“=”的条件,导致无论如何结果集内不会出现空值。