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)
展开
 我来答
jsczwangx
2013-11-19 · TA获得超过1222个赞
知道小有建树答主
回答量:777
采纳率:100%
帮助的人:629万
展开全部

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

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

追问
如果产生两个记录的话怎么可以用等号呢,但是我把这句单独拿出来就会只有一个结果。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式