日期:2014-05-17  浏览次数:20810 次

not exists在这个语句中怎么理解?
我简化了一下表名之类的,让语句看起来小一些,这是“每个Y中最新的X”

select * from ZT Z where (not exists(select * from ZT Z2 where(Z2.y = Z.y) and (Z2.x>Z.x)))




我在网上查了not exists的意思,但是理解起来不对啊,子查询select * from ZT Z2 where(Z2.y = Z.y) and (Z2.x>Z.x)这句话是把最小的去掉吧?加上ZT z试了试,也确实是这个意思。再加上not exists,岂不是求最小的?结果最大的出来了。。。百思不得其解啊~~~

------解决方案--------------------
为什么用not exists.
exists只要有一条满足条件就返回真值。。。not exists一样。。。
根据这个判断大小应该不成立吧

------解决方案--------------------
引用:
Quote: 引用:

为什么用not exists.
exists只要有一条满足条件就返回真值。。。not exists一样。。。
根据这个判断大小应该不成立吧



可是确实做到了。。。我就想知道是怎么做到的,逻辑上讲不通啊。具体的x字段是一个时间字段

需要注意的是你这个语句是一个整体,你求的Z里值(不是Z2),z2在这里只是起一个连接作用。
select * from ZT Z2 where(Z2.y = Z.y) and (Z2.x>Z.x)这里其实也是求Z的值,如果是求Z的值,那么剩下的就是最小的,加上NOT exists 就是最大值