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去掉)
相关文章推荐
- Oracle建立表空间和用户
- Oracle创建directory
- oracle常用命令
- ORACLE ADF11g:VO代码改变ViewCriteria
- oracle去掉重复记录语句
- Oracle 拼接列数据的方法
- oracle创建表空间,临时表空间,用户
- Oracle Golden Gate体系架构详解
- 12C-OCP升级1z-060-018
- 轻松解决oracle11g 空表不能 exp 导出 的问题。
- 12C-OCP升级1z-060-017
- Oracle在存储过程中建表时权限不足
- 12C-OCP升级1z-060-016
- Oracle学习笔记(1)
- Oracle 的for update行锁
- Oracle安装与学习
- oracle提示“ORA-01002: 提取违反顺序”
- 12C-OCP升级1z-060-015
- 怎么查看oracle数据库数据量大小?
- mysql和oracle日期和字符相互转换