decode类似于case when的逻辑 decode((select count(1) from T_SM_MODULE m1 where SPAR_MODULE_ID=m2.SMODULE_ID),0,1,0) 相当于 case when (select count(1) from T_SM_MODULE m1 where SPAR_MODULE_ID=m2.SMODULE_ID)=0 then 1 else 0 end
其实楼主decode就是java里面的三目运算符,当然是可以无限嵌套。 select decode(code,1,0,1) from dual 类似于 code==1?0:1 and more: select decode(code,1,'一','2','二','3','三','E') from table_name 类似于code==1?'一':(code==2?'二':(code==3?'三':'E')) Tips:假如楼主decode有未包含的情况返回空。如 select decode(code,1,'ONE',2,'TWO') from dual 遇到code为3,但是未写最后的else效果。
decode((select count(1) from T_SM_MODULE m1 where SPAR_MODULE_ID=m2.SMODULE_ID),0,1,0)
相当于
case when (select count(1) from T_SM_MODULE m1 where SPAR_MODULE_ID=m2.SMODULE_ID)=0 then 1 else 0 end
但是执行SQL语句之后就
但是执行SQL语句之后就
怎么了。数据不对还是怎么?不明白你的问题所在
根据你的数据来解释吧。
比如第一条数据SMODULE_ID=0131,SPAR_MODULE_ID =01
在执行子查询的时候,就变成
decode((select count(1)
from T_SM_MODULE m1
where SPAR_MODULE_ID = ‘0131’),
0,
1,
0)
这是就相当于在T_SM_MODULE 寻找SPAR_MODULE_ID = ‘0131’的记录数,根据你的结果来看,应该不存在这样的记录,所以子查询返回记录数为0,然后通过decode来处理,整个表达式的返回值为1。
在比如SMODULE_ID=02这条数据
很明显在表T_SM_MODULE 存在SPAR_MODULE_ID = ‘02’的数据(截图的第二条数据),此时子查询返回的是非0的记录条数,通过decode处理后返回值为0
遇到看不明白的SQL,最好的办法是将SQL进行分割,从里到外分步执行,通过看执行结果能够给你很大的帮助
select decode(code,1,0,1) from dual 类似于 code==1?0:1
and more:
select decode(code,1,'一','2','二','3','三','E') from table_name 类似于code==1?'一':(code==2?'二':(code==3?'三':'E'))
Tips:假如楼主decode有未包含的情况返回空。如
select decode(code,1,'ONE',2,'TWO') from dual 遇到code为3,但是未写最后的else效果。