您的位置:首页 > 数据库 > Oracle

oracle NOT exists函数用列

2016-03-23 17:28 417 查看
exists(sql 返回结果集为真)
not exists (sql 不返回结果集为真)


1、对于not exists查询,内表存在空值对查询结果没有影响;对于not in查询,内表存在空值将导致最终的查询结果为空。

2、对于not exists查询,外表存在空值,存在空值的那条记录最终会输出;对于not in查询,外表存在空值,存在空值的那条记录最终将被过滤,其他数据不受影响。

SELECT a.*

FROM t_department a

WHERE a.id IN('1e48c442-0b70-33bc-9191-6c6c1de226bb', '6e0e7055-a032-33f9-92a4-f33163c21f49', '8a1e808b-55fd-3945-9cb3-d8857ed88389', '2e4866d9-a8e4-36c4-aa38-0bc4626d7344', 'c69db3c9-7db7-3d01-a641-2d4ded23f775')

AND NOT exists

(SELECT b.id

FROM t_department b

WHERE b.id IN('1e48c442-0b70-33bc-9191-6c6c1de226bb', '6e0e7055-a032-33f9-92a4-f33163c21f49', '8a1e808b-55fd-3945-9cb3-d8857ed88389', '2e4866d9-a8e4-36c4-aa38-0bc4626d7344', 'c69db3c9-7db7-3d01-a641-2d4ded23f775')

AND a.id != b.Id

AND instr(a.indexcode, b.INDEXCODE)>=0

AND a.levels > b.levels

)

原先数据 一级部门 A,B,C 二级部门 A1,D1,三级部门 E1

经过该sql会将具有上下级关系的部门 中 下级去掉

得到数据 一级部门 A,B,C 二级部门 D1,三级部门 E1

no exists()中查询的是A的id (此SQL主要是将上面id一一与查询出的A的id判断是否具有上下级关系有的话就把该条id去掉)


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: