读书人

sql 语句看不明白。解决方案

发布时间: 2012-01-28 22:06:13 作者: rapoo

sql 语句,看不明白。
表如下
id name content sclass_name ballot monthStar
34 邓健 偶是第一 ECT212 10 2007-5

我想得到每月份即(mothstar)中ballot值最大的人的姓名(name)

我看有人提供的答案是:
Select * from 表 as t where not exists(
Select * from 表 where monthStar=t.monthStar and ballot> t.ballot)

还有
select * from T as tmp
where not exists(select 1 from T where monthStar=tmp.monthStar and ballot> tmp.ballot)

这两句我看不明白什么意思。尤其是括号里面的,请哪位帮忙讲下。。。谢谢了。

[解决办法]
用EXIST、IN效率比较低,用内连接高一些
SQL语句类似于自连接
如不存在monthStar=t.monthStar and ballot> t.ballot,则满足条件
[解决办法]
看帮助
not exists的意思是不存在
[解决办法]
Select * from 表1 as t where not exists(
Select * from 表1 where monthStar=t.monthStar and ballot> t.ballot)
简单这样里面吧,SELECT * FROM 表1 t WHERE条件是,
根据 monthStar=t.monthStar关联,拿ballot字段比较大小,从表1中找比t表(别名)更大的记录,要是没有找到就返回当前行。
不知道这样说楼主明白不明白,不明白可以找not exists相关帮助。


[解决办法]
Select * from 表 as t where not exists(
Select * from 表 where monthStar=t.monthStar and ballot> t.ballot)

可以改成:

Select a.* from 表 as a,表 as b
where a.monthStar=b.monthStar and b.ballot <=a.ballot)
[解决办法]
Select * from 表 as t where not exists(
Select * from 表 where monthStar=t.monthStar and ballot> t.ballot)

还有
select * from T as tmp
where not exists(select 1 from T where monthStar=tmp.monthStar and ballot> tmp.ballot)

这2个是一样的,没有区别,就你的题目,应该是符合要求的。
monthStar=tmp.monthStar 月份相同
ballot> tmp.ballot 比最终数据查询里的ballot大的,用not exists保证查询出来的是ballot最大值

读书人网 >SQL Server

热点推荐