Select * from #T a where not exists(select 1 from #T where Name=a.Name and ID<a.ID)这个过程是如何执行的呢 ?
请详细说明 谢谢~!

解决方案 »

  1.   

    假设数据有为
    name,id
    a,1
    a,2
    b,1
    外部查询先将a,1这条数据进入子查询判断筛选,子查询中查询name=a,id<1的数据是不存在的,那么根据not exists,这条数据是要查询的数据,
    接下来a,2这条数据,子查询中查询name=a,id<2的数据是存在的,根据not exists,这条数据不是要查询的数据,所以过滤掉
    最终你的这个语句执行的结果就是,查询name中取最小id的整条数据
      

  2.   


    首先选外层查询中#T表的第一个元组,根据它与内层查询相关的属性值Name值处理内层查询。
    若内层查询结果为空,则外层查询的where子句返回值为真,于是取外层查询的该元组放入结果表。
    然后再取#T表中的下一个元组,重复这个过程,直至外层#T表全部检查完为止。
      

  3.   

    注意 not exists  返回的布尔值。 外层元素,依次嵌套查询。