oracle使用+简写左关联出现的结果集不一致问题

这是使用(+)的sql语句(已简写)

select a.id,b.num
from a,b
where a.id=b.id(+) and b.num>10

这是使用left join的sql语句

select a.id,b.num
from a
left join b
on(a.id=b.id and b.num>10)

两个sql的结果不一致,通过查找问题,更改使用+的sql

select a.id,b.num
from a,b
where a.id=b.id(+) and b.num(+)>10

更改后结果一致

结论:

oracle使用+简写左关联时,两个表的非关联条件若有(+),则最后的结果行数与主表相同,若两个表的非关联条件没有(+),则这些非关联条件会作用于关联后的结果,对关联后的结果再进行一次条件筛选,最后的结果行数<=主表

原文地址:https://www.cnblogs.com/mlr-wjy/p/12048513.html

时间: 2024-07-30 04:25:22

oracle使用+简写左关联出现的结果集不一致问题的相关文章

oracle中的左关联

在使用左关联时,有时会出现大量的空数据,这是什么原因造成的呢? 这是因为主表关联其他表之前,主表中的字段就是空的,这时候再用这个字段关联其他表的字段,就会出现空值 例如: select * from student t left join emp t1 on t.数学=t1.empno 这是用一个空数据的表关联另一张表 结果如下: 所以左关联时注意空数据!

oracle使用LEFT JOIN关联产生的问题在查询结果中使用CASE WHEN 无法判断

oracle使用LEFT JOIN关联产生的问题在查询结果中使用CASE WHEN 无法判断 查询方式一: 1 SELECT 2 CASE WHEN (SELECT CAST(SUM(CASE 3 WHEN (ALLOCABLE_PRIME_CURRENCY_VALUE IS NULL AND STATE_IND = 1) THEN 4 NVL(PRIME_CURRENCY_VALUE, 0) 5 ELSE 6 NVL(ALLOCABLE_PRIME_CURRENCY_VALUE, 0) END

Oracle两张表关联批量更新其中一张表的数据

Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXISTS (SELECT 1 FROM 表1 WHERE 表1.A = 表2.A); 尤其注意最后的外层where条件尤为重要,是锁定其批量更新数据的范围. 方法二: MERGE INTO 表2 USING 表1 ON (表2.A = 表1.A) -- 条件是 A 相同 WHEN MATCHED TH

左关联查询多表

第一次使用左关联进行多表查询,从懵逼到大致i理解,记录以提醒自己. 三张表. sec_user 表 sec_loginUser表 sec_role表 需求:将三张表关联查询,判断登录者,loginUser 表中数据对应的user,的所拥有的角色role,以便后续使用 shiro进行RBAC控制 sql如下: 运行结果如下:

oracle解决多表关联分组查询问题

做了一个功能需要分组查询,同时查询A表分组查询的ID需要关联B表的数据,本来想两个表关联查询,但是报group by 语法不正确.所以做了以下修改. select count(*), cindexid,(select vindexcode from comindex where pk_index =cindexid) as vindexcode ,iquesttype from rqt_examquest where pk_examquest in (    select cexamquesti

cognos如何制作维表左关联事实表的报表

需求描述:日期维表左关联事实表,当选择某个月的时候,我们需要把那个月每一天的数据展现出来,事实表如没数据就显示空.如下效果图: 最开始我试过使用FM来设计维表和事实表为左关联,但是由于需要2个参数,一个基于维表的月份参数,一个是基于事实表中销售类型作为参数.发现报表始终展现出来的是内连接的效果.现在我们可以巧妙利用工具箱里面的"并集"来实现,如下图: 查询1是事实表的数据,设置如下: 查询2是维表的数据,数据项与查询1的一样,但是查询2里面关于事实数据的数据项,我们统一设置表达式为:&

【数据库】Oracle 11g使用命令导入导出表,导出结果集

[数据库]Oracle 11g使用命令导入导出表,导出结果集 很久没敲命令进行Oracle数据库表的导入(imp),导出(exp)了,今天猛一敲,发现有些命令居然忘了,顺手写下这篇博文,记录一下! exp本地导出命令: 1 exp username/[email protected] file=d:\demo.dmpfull=y 2 exp username/[email protected] file=d:\demo.dmpowner=(xx) 3 exp username/[email pr

windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群

 windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 能够放到 asm 磁盘上,而ASM的启动依赖于ocr和votedisk,所以在丢失ocr或votedisk 会导致cluter无法正常启动 假设原来的ocr 位置已经不存在,则必须使用同样的名字在原来同样的位置创建一个空 OCR . 建议使用下面步骤来恢复OCR: 1.确定当前集群节点数 C:\>olsnodes 2.关闭 oracle clusterwa

windows 环境如何恢复 (oracle 11g grid) ocr voting 损坏的集群

 windows 环境如何恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 可以放到 asm 磁盘上,而ASM的启动依赖于ocr和votedisk,所以在丢失ocr或votedisk 会导致cluter无法正常启动 如果原来的ocr 位置已经不存在,则必须使用相同的名字在原来相同的位置创建一个空 OCR . 建议使用以下步骤来恢复OCR: 1.确定当前集群节点数 C:\>olsnodes 2.关闭 oracle clusterwa