求帮,select 执行语句的 逻辑执行顺序
create table a (name nvarchar(10),course varchar(10))
insert into a values(N'张三', '12')
insert into a values(N'张三', '111')
insert into a values(N'张三', '222')
insert into a values(N'李四', '111') go
表a
name course
---------- ----------
张三 111
张三 222
李四 111
张三 12
执行语句:
SELECT name, course,
(SELECT COUNT(1) AS Expr1
FROM a
WHERE (name = t.name) AND (course < t.course) ) + 1 AS px
FROM a AS t
结果:name course px
---------- ---------- -----------
张三 111 1
张三 222 3
李四 111 1
张三 12 2
------解决方案--------------------首先是from a as t也就是最后一句,得出一个虚拟表假设名字为V1,这个表不能在查询过程中查到,第二步是内层FROM A这个,然后进行WHERE条件筛选,第三步把筛选数据和外层的FROM A AS T进行关联,得到一个结果,第四部进行COUNT操作,最后一步返回SELECT 的结果
------解决方案--------------------或者你用文本化执行计划看过程,从最内层开始,逐步向外执行
create table a (name nvarchar(10),course varchar(10))
insert into a values(N'张三', '12')
insert into a values(N'张三', '111')
insert into a values(N'张三', '222')
insert into a values(N'李四', '111')
SET STATISTICS PROFILE&nbs