求SQL大神解决问题,急急急

永恒魔界 2013-11-01 05:21:10
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);--无数据
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); --有数据

求解为什么?先感谢各位了
...全文
274 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Persistence_x 2013-11-07
  • 打赏
  • 举报
回复
旁观学习下
  • 打赏
  • 举报
回复
引用 4 楼 xinpingf 的回复:
[quote=引用 3 楼 z_shousi 的回复:] [quote=引用 2 楼 xinpingf 的回复:] 因为alx_material_types_intf_v的parent_type列里有空值,所以子查询的结果集里有 null 存在 not in (null) 的结果是null,不是true
2楼说的不错,你的第一句SQL的子查询SELECT a.parent_type FROM alx_material_types_intf_v a 中parent_type有空值的话,not in (null)。所以没有数据、 而你的第二个SQL坐等大神解释(个人觉得是不是优化器解决这个问题了)... [/quote] 第二个SQL里面,因为多了个 “= ”的条件,导致无论如何结果集内不会出现空值。。[/quote] 额,这点给忘了、谢谢解疑!
xinpingf 2013-11-04
  • 打赏
  • 举报
回复
引用 3 楼 z_shousi 的回复:
[quote=引用 2 楼 xinpingf 的回复:] 因为alx_material_types_intf_v的parent_type列里有空值,所以子查询的结果集里有 null 存在 not in (null) 的结果是null,不是true
2楼说的不错,你的第一句SQL的子查询SELECT a.parent_type FROM alx_material_types_intf_v a 中parent_type有空值的话,not in (null)。所以没有数据、 而你的第二个SQL坐等大神解释(个人觉得是不是优化器解决这个问题了)... [/quote] 第二个SQL里面,因为多了个 “= ”的条件,导致无论如何结果集内不会出现空值。。
  • 打赏
  • 举报
回复
引用 2 楼 xinpingf 的回复:
因为alx_material_types_intf_v的parent_type列里有空值,所以子查询的结果集里有 null 存在 not in (null) 的结果是null,不是true
2楼说的不错,你的第一句SQL的子查询SELECT a.parent_type FROM alx_material_types_intf_v a 中parent_type有空值的话,not in (null)。所以没有数据、 而你的第二个SQL坐等大神解释(个人觉得是不是优化器解决这个问题了)...
xinpingf 2013-11-01
  • 打赏
  • 举报
回复
因为alx_material_types_intf_v的parent_type列里有空值,所以子查询的结果集里有 null 存在 not in (null) 的结果是null,不是true
  • 打赏
  • 举报
回复
怎么我测试没数据
WITH t1 AS
(select 1 ID  from dual UNION 
select 2 ID from dual UNION 
select 3 ID from dual),
t2 AS 
(select 1 cd  from dual UNION 
select 2 cd from dual UNION 
select 3 cd from dual)
--select * from t1 WHERE ID NOT IN (select cd from t2)
select * FROM t1 WHERE ID NOT IN (select t2.cd from t2 WHERE t2.cd=t1.id)

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧