请教下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的执行顺序.最好能祥细点.
还有这种查询有没有专业的名字什么的.
展开
 我来答
流浪云风
2012-10-17 · TA获得超过4315个赞
知道大有可为答主
回答量:1119
采纳率:69%
帮助的人:939万
展开全部
可以通过看oracle的执行计划来看执行顺序及效率。
首先执行case when 中的子查询;
然后检索USERSBASICINFO表中id项;
最后查询USERSBASICINFO表的全表数据来找满足要求的数据。

这就是很基本的查询,中间用到case when,case when中又嵌套了子查询,没有所谓的专业名称。
更多追问追答
追问
为什么会先执行子查询?
如果先执行子查询 那里面的UB.ID从哪里来?
追答
这就是oracle规定好的。你可以这样理解,先执行子查询,编译器发现需要UB.ID,然后又去查USERSBASICINFO表中的id,为了确定要查什么id,所以需要检索USERSBASICINFO表。
执行顺序就是这样的。
你理解的需要什么数据,那是依赖关系。二者不能混为一谈。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式