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) AS NUMBER(18,6)) AS ALLOCABLE_PRIME_CURRENCY_VALUE
7 FROM RP_LEDGER_ITEM R
8 WHERE R.SOURCE_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
9 AND SOURCE_TYPE = ‘CASH‘) = 0 THEN 0 ELSE 1 END,
10 (SELECT SUM(CASE
11 WHEN (ALLOCABLE_PRIME_CURRENCY_VALUE IS NULL AND STATE_IND = 1) THEN
12 NVL(PRIME_CURRENCY_VALUE, 0)
13 ELSE
14 NVL(ALLOCABLE_PRIME_CURRENCY_VALUE, 0) END) AS ALLOCABLE_PRIME_CURRENCY_VALUE
15 FROM RP_LEDGER_ITEM R
16 WHERE R.SOURCE_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
17 AND SOURCE_TYPE = ‘CASH‘),
18 RP_LEDGER_ITEM.LEDGER_ITEM_ID
19 FROM RP_CASH_MOVEMENT
20 LEFT JOIN RP_LEDGER_ITEM
21 ON RP_LEDGER_ITEM.CASH_MOVEMENT_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
22 AND RP_LEDGER_ITEM.CASH_MOVEMENT_ID IS NOT NULL
23 WHERE NVL(RP_CASH_MOVEMENT.IS_RESERVE_FUND, ‘0‘) = ‘0‘
24 AND 1 = 1
25 AND RP_CASH_MOVEMENT.RP_ID = ‘R‘
26 AND RP_CASH_MOVEMENT.INPUT_DATE >=
27 TO_DATE(‘2014/2/1 0:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘)
28 AND (RP_CASH_MOVEMENT.OFFICE_ID = ‘0B4B12XOG33MO‘)

查询结果如下:

查询方式二:


SELECT
CASE WHEN (SELECT CAST(SUM(CASE
WHEN (ALLOCABLE_PRIME_CURRENCY_VALUE IS NULL AND STATE_IND = 1) THEN
NVL(PRIME_CURRENCY_VALUE, 0)
ELSE
NVL(ALLOCABLE_PRIME_CURRENCY_VALUE, 0) END) AS NUMBER(18,6)) AS ALLOCABLE_PRIME_CURRENCY_VALUE
FROM RP_LEDGER_ITEM R
WHERE R.SOURCE_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
AND SOURCE_TYPE = ‘CASH‘) = 0 THEN 0 ELSE 1 END,
(SELECT SUM(CASE
WHEN (ALLOCABLE_PRIME_CURRENCY_VALUE IS NULL AND STATE_IND = 1) THEN
NVL(PRIME_CURRENCY_VALUE, 0)
ELSE
NVL(ALLOCABLE_PRIME_CURRENCY_VALUE, 0) END) AS ALLOCABLE_PRIME_CURRENCY_VALUE
FROM RP_LEDGER_ITEM R
WHERE R.SOURCE_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
AND SOURCE_TYPE = ‘CASH‘),
‘‘ LEDGER_ITEM_ID
FROM RP_CASH_MOVEMENT
LEFT JOIN RP_LEDGER_ITEM
ON RP_LEDGER_ITEM.CASH_MOVEMENT_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
AND RP_LEDGER_ITEM.CASH_MOVEMENT_ID IS NOT NULL
WHERE NVL(RP_CASH_MOVEMENT.IS_RESERVE_FUND, ‘0‘) = ‘0‘
AND 1 = 1
AND RP_CASH_MOVEMENT.RP_ID = ‘R‘
AND RP_CASH_MOVEMENT.INPUT_DATE >=
TO_DATE(‘2014/2/1 0:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘)
AND (RP_CASH_MOVEMENT.OFFICE_ID = ‘0B4B12XOG33MO‘)

查询结果如图:

2条sql语句最大的区别在于

有些可能表达不清楚,

主要原因我也不知道,如果谁有兴趣可以回复我!

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

时间: 2024-10-21 17:27:48

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

Oracle 性能调优之:使用 V$SQL_PLAN 视图查询内存中的执行计划

V$SQL_PLAN视图提供了一种方法,可用于检查仍位于库高速缓存的游标的执行计划.此视图中的信息与 PLAN_TABLE 视图中的信息非常类似.但是,EXPLAIN PLAN 显示的是执行相应语句时可以使用的理论,而V$SQL_PLAN 包含实际使用的计划.通过 EXPLAIN PLAN 语句获取的执行计划与用来执行游标的执行计划可能有所不同.原因在于,也许已经用不同的会话参数值编译了游标. V$SQL_PLAN 显示一个游标的计划,并非与一个 SQL 语句相关联的所有游标的计划.区别在于,一

ORACLE的SQL JOIN方式小结

在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图.物化视图等联结),官方的解释如下所示 A join is a query that combines rows from two or more tables, views, or materialized views. Oracle Database performs a join whenever multiple tables appear in the FROM clause of the que

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(+)

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

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

Oracle创建两表关联查询的视图

在项目开发中,有时候会用到多表查询,有很多种方法,比如关联,比如视图,但对于查询来说,视图查询是最快的,如果你的数据库的字段信息很多,那查询就得整表查,比如两表查询,我们就可以把要的字段抽取出来,放在视图中,这样查询时就只要查询视图中所要的字段,其他的就可以无视.下面我记录一下Oracle创建视图 大多人操作数据库是用Scott权限进行操作数据库,但Scott是没有创建视图的权限的,所以我们要进入管理员System账号,进去给Scott授权一个创建视图权限.进入System后,我们打入以下语句

oracle调优 浅析关联设计

浅析关联设计 [范式] 比較理想的情况下,数据库中的不论什么一个表都会相应到现实生活中的一个对象,如球员是一个对象,球队是一个对象,赛程是一个对象,比赛结果又是一个对象等等,则就是范式. [关联设计] 对于关联设计能够理解成表和表之间要有关联关系,在对表查询时常常使用关联查询. 补充:关系数据库的来源:对一个事务操作要从多个表中读. 如2014巴西世界杯这个表空间中要有球员表.赛程表.比赛结果表,比赛结果表要关联比赛的队伍名字.球员的名字最后关联一个比赛的结果,这就是一个简单的关联关系.至于为何

使用NGUI制作关联下拉菜单(查询全国天气)

关联菜单,在我们浏览网页时经常见到,它极大的方便了我们的操作,在游戏中,偶尔也会用到关联下拉菜单.下面,我们使用关联下拉菜单来查询下全国的天气. 首先,老规矩我们搭建基本的UI界面.我们就不自己去制作UI组件了,直接使用NGUI封装好的UI组件. 我们先创建于一个Sprite,重命名为BgSprite,为其选择图集和精灵. 在菜单中选择NGUI,选择Open,打开Prefab Toolbar,拖一个PopupList,重命名为ProvincePopupList.这里,我们要注意, 我们导入支持中

Oracle Coherence中文教程二十三:使用连续查询缓存

使用连续查询缓存 虽然有可能取得时间从连贯缓存查询结果中的一个点,并有可能以接收事件,将改变该查询的结果,连贯性提供了一个功能,它结合了与一个连续的数据流中的相关事件的查询结果在一个实时的方式保持一个最新的日期的查询结果.这种能力被称作连续查询,因为它具有相同的效果,如果想要查询的零延迟和查询被执行多次,每毫秒!点时间查询结果和事件的更多信息,请参见第22章,"查询缓存中的数据." 相干物化成一个连续查询缓存查询结果,然后,缓存保持最新实时查询使用事件侦听器实现连续查询功能.换句话说,