sql筛选语句中where选择条件的筛选出来的结果
selecta.Department_Id,b.Department_Name,b.Change_Timeas开始时间,a.Change_Timeas结束时间fromCh...
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) 展开
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
然后外层再选择列,就是查出来的结果了。有问题再追问吧,望采纳。
追问
如果产生两个记录的话怎么可以用等号呢,但是我把这句单独拿出来就会只有一个结果。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询