sql筛选语句中where选择条件的筛选出来的结果

select a.Department_Id,b.Department_Name,b.Change_Time as 开始时间 ,a.Change_Time as 结束时间 from Change a,Change b
where a.Change_Time=(select MIN(c.Change_Time) from Change c where c.Change_Time>b.Change_Time)

首先来说一下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

然后外层再选择列,就是查出来的结果了。有问题再追问吧,望采纳。

追问

如果产生两个记录的话怎么可以用等号呢,但是我把这句单独拿出来就会只有一个结果。

温馨提示:答案为网友推荐,仅供参考
相似回答