怎么会提示 对象名无效?
时间:2011-11-05
来源:互联网
FROM (SELECT E.sid, num=COUNT(*), S.sname
FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S
WHERE E.sid = S.sid
GROUP BY E.sid, S.sname) AS TEMP
WHERE TEMP.num = (SELECT MAX(TEMP.num) FROM TEMP)
以上的SQL语句提示对象名TEMP无效,如果我把(SELECT MAX(TEMP.num) FROM TEMP)改成一个固定值3,则该代码可以正确执行。如下:
SELECT TEMP.sid, TEMP.sname
FROM (SELECT E.sid, num=COUNT(*), S.sname
FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S
WHERE E.sid = S.sid
GROUP BY E.sid, S.sname) AS TEMP
WHERE TEMP.num = 3
如果TEMP对象找不到,那么它又怎么能识别TEMP.num呢?
真心求教!
作者: I_code 发布时间: 2011-11-05
SELECT TEMP.sid, TEMP.sname FROM (SELECT E.sid, num=COUNT(*), S.sname FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S WHERE E.sid = S.sid GROUP BY E.sid, S.sname) AS TEMP WHERE TEMP.num = (SELECT MAX(num) FROM TEMP)
作者: fredrickhu 发布时间: 2011-11-05
SELECT top 1 TEMP.sid, TEMP.sname FROM (SELECT E.sid, num=COUNT(*), S.sname FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S WHERE E.sid = S.sid GROUP BY E.sid, S.sname) AS TEMP order by num desc
作者: ssp2009 发布时间: 2011-11-05
SELECT TEMP.sid, TEMP.sname
FROM (SELECT E.sid, num=COUNT(*), S.sname
FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S
WHERE E.sid = S.sid
GROUP BY E.sid, S.sna……
temp 是个记录集,不是一个表,你不能在另一个子查询中引用前一子查询的数据集.如果一定要引用,则必须在from 后面写全这个子查询的全部语句.
2005以上,可以用公用表达式来处理:
SQL code
;with temp as( SELECT E.sid, num=COUNT(*), S.sname FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S WHERE E.sid = S.sid GROUP BY E.sid, S.sname )select sid,sname from temp where num=(select MAX(num) from tempdb)
2000,可以先将子查询得到的结果集保存到临时表 (select .... into # from ..),然后用上面类似的语法从临时表中去查.
作者: qianjin036a 发布时间: 2011-11-05
SQL code
select * from ( SELECT E.sid, num=COUNT(*), S.sname,ROW_NUMBER()over(order by COUNT(*) desc) as row FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S WHERE E.sid = S.sid GROUP BY E.sid, S.sname )t where row =3
作者: roy_88 发布时间: 2011-11-05
SQL code
;with temp as( SELECT E.sid, num=COUNT(*), S.sname FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S WHERE E.sid = S.sid GROUP BY E.sid, S.sname )select sid,sname from temp where num=(select MAX(num) from temp)
作者: qianjin036a 发布时间: 2011-11-05
前面写得有点错:
SQL code
;with temp as(
SELECT E.sid, num=COUNT(*), S.sname
FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S
WHERE E.sid = S.sid
GROUP BY E.sid, S.sname……
谢谢你的回答,我想问下,如果不用临时表,还有其他的解决方法么?
作者: I_code 发布时间: 2011-11-06
谢谢你的回答,我想问下,如果不用临时表,还有其他的解决方法么?
--如果最大的值只有一个:
SQL code
SELECT top 1 E.sid, num=COUNT(*), S.sname FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S WHERE E.sid = S.sid GROUP BY E.sid, S.sname order by num desc
--如果最大的值有多个:
SQL code
select m.* from ( SELECT E.sid, num=COUNT(*), S.sname FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S WHERE E.sid = S.sid GROUP BY E.sid, S.sname ) m where m.num = ( SELECT top 1 num=COUNT(*) FROM [databasePrinciple-1].[dbo].[Enroll] E, [databasePrinciple-1] .[dbo] .Student S WHERE E.sid = S.sid GROUP BY E.sid, S.sname order by num desc )
作者: dawugui 发布时间: 2011-11-06
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28