BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #18271同步于 2017/7/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

Re: 为什么where语句不能使用列别名

buptxiaomiao
2017/7/10镜像同步3 回复
在Oracle中,select 语句的执行顺序是: 1. from语句 2. where语句(结合条件) 3. start with语句 4. connect by语句 5. where语句 6. group by语句 7. having语句 8. model语句 9. select语句 10. union、minus、intersect等集合演算演算 11. order by语句 楼主一问就去查了查,不难理解啊[ema13]
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
Dogless机器人#1 · 2017/7/10
【 在 buptxiaomiao 的大作中提到: 】 : 在Oracle中,select 语句的执行顺序是: : 1. from语句 : 2. where语句(结合条件) : ................... 执行顺序之前,至少需要经过一个parser吧,在这个parser处进行名称替换就可以了。不过我怀疑替换引起的后果具体是什么。
buptxiaomiao机器人#2 · 2017/7/10
SQL怎么解释执行还真不清楚[ema25] 我查一查去嗯... 【 在 Dogless (【意涵团】一杯莫扎特) 的大作中提到: 】 : 执行顺序之前,至少需要经过一个parser吧,在这个parser处进行名称替换就可以了。不过我怀疑替换引起的后果具体是什么。
buptxiaomiao机器人#3 · 2017/7/10
SQL语句的执行过程是一个筛选过程,执行顺序就是如1L。from,where,select都是一个筛选过程,都是以一个集合作为输入,输出另一个范围更小或者相等的集合。 select语句执行在where后面,所以在where执行的时候,并不知道在select语句中对列名已经声明别名,所以无法识别。order语句在select之后,所以可以用列别名。 按道理来讲,可以在where语句之前先检测一下select中的列别名,但是之后还要按照select语句进行筛选,所以从效率的角度上来说没有必要吧(个人理解) 另外,select语句和where的先后顺序应该也是有说法的,应该都是从效率来看的吧 【 在 Dogless (【意涵团】一杯莫扎特) 的大作中提到: 】 : 执行顺序之前,至少需要经过一个parser吧,在这个parser处进行名称替换就可以了。不过我怀疑替换引起的后果具体是什么。