请教下oracle case when then 问题
SELECTUB.ID,UB.UNAME,UB.SHOPNAME,(CASEWHEN(SELECTCOUNT(1)FROMCLIENTTRADECLWHERECL.CID...
SELECT UB.ID,
UB.UNAME,
UB.SHOPNAME,
(CASE
WHEN (SELECT COUNT(1) FROM CLIENTTRADE CL WHERE CL.CID = UB.ID) = 0 THEN
'0'
ELSE
'1'
END) AS MABNOTE
FROM USERSBASICINFO UB
有如上sql语句,请问是子查询语句先执行还是外面的先执行,
谁能说明一下这条sql的执行顺序.最好能祥细点.
还有这种查询有没有专业的名字什么的. 展开
UB.UNAME,
UB.SHOPNAME,
(CASE
WHEN (SELECT COUNT(1) FROM CLIENTTRADE CL WHERE CL.CID = UB.ID) = 0 THEN
'0'
ELSE
'1'
END) AS MABNOTE
FROM USERSBASICINFO UB
有如上sql语句,请问是子查询语句先执行还是外面的先执行,
谁能说明一下这条sql的执行顺序.最好能祥细点.
还有这种查询有没有专业的名字什么的. 展开
1个回答
展开全部
可以通过看oracle的执行计划来看执行顺序及效率。
首先执行case when 中的子查询;
然后检索USERSBASICINFO表中id项;
最后查询USERSBASICINFO表的全表数据来找满足要求的数据。
这就是很基本的查询,中间用到case when,case when中又嵌套了子查询,没有所谓的专业名称。
首先执行case when 中的子查询;
然后检索USERSBASICINFO表中id项;
最后查询USERSBASICINFO表的全表数据来找满足要求的数据。
这就是很基本的查询,中间用到case when,case when中又嵌套了子查询,没有所谓的专业名称。
更多追问追答
追问
为什么会先执行子查询?
如果先执行子查询 那里面的UB.ID从哪里来?
追答
这就是oracle规定好的。你可以这样理解,先执行子查询,编译器发现需要UB.ID,然后又去查USERSBASICINFO表中的id,为了确定要查什么id,所以需要检索USERSBASICINFO表。
执行顺序就是这样的。
你理解的需要什么数据,那是依赖关系。二者不能混为一谈。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询