首先来说一下sql的大概的执行顺序,主流的数据库一般都是这样的,from表(找到数据集)—where(对数据进行删选)—group by(对数据进行分组,合并处理)—select(选出数据项)—order by(对结果数据集进行排序),这是大致粗糙的顺序,还有排重啊、删选组啊等等,不细说了,最重要的是看执行计划,你会清晰的看到语句执行的顺序和成本消耗(cost)。
我猜到lz在纠结什么问题。
where a.Change_Time=(select MIN(c.Change_Time) from Change c where c.Change_Time>b.Change_Time) 是这句的结果集吧
换个角度来想,其实这就话的意思就是在a表中大于b表的时间集中选最小的,很显然当b表时间为
2011-12-5时a表中大于此值的最小值为2011-12-6;当b表时间为2011-6-7时a表中大于此值的最小值为2011-12-5,因此会有两条记录产生。执行下面语句看一下,将非常清晰。
select a.*,b.* from Change a,Change b
where a.Change_Time=(select MIN(c.Change_Time) from Change c where c.Change_Time>b.Change_Time);
结果集:
1 01 信息 2011-12-6 01 计算机 2011-12-5
2 01 计算机 2011-12-5 01 电子 2011-6-7
然后外层再选择列,就是查出来的结果了。有问题再追问吧,望采纳。