今天测试一页面时才发现这样的代码错得厉害:
错误语句:
SQL语句: "SELECT TOP 20 * FROM [TableName] WHERE [id]='条件' ORDER BY Time DESC";
就是上面这条语句,让我自己脸红!
我一直以为DBMS执行上面语句时,首先跑完整个表一遍,然后把所有符合条件的记录选全部选出来,再根据Time排序,再然后才执行SELECT TOP 20这个子句的.
可是今天才发现不是这样,我测试时就发现DBMS首先执行的是SELECT TOP 20子句的,怎么办?
这不是我要的效果啊?
大家帮忙,以上语句是哪个子句先执行啊?
我这边测试时,先添加的记录没能最前显示,不会是我的语句写错了吧?????
18 个解决方案
#1
你什么数据库,
1.[id]='条件'
2.ORDER BY Time DESC
3.TOP 20
难道不对?
1.[id]='条件'
2.ORDER BY Time DESC
3.TOP 20
难道不对?
#2
Time、Content、Name等名字要注意
ORDER BY [Time] DESC
SELECT TOP 20 * FROM [TableName] WHERE [id]='条件' ORDER BY [Time] DESC
试一试
ORDER BY [Time] DESC
SELECT TOP 20 * FROM [TableName] WHERE [id]='条件' ORDER BY [Time] DESC
试一试
#3
应该是先执行TOP20,然后ORDER BY
你可以先进行ORDER BY,在SELECT TOP
SELECT TOP 20 * FROM
(
SELECT * FROM [TableName] WHERE [id]='条件' ORDER BY Time DESC}
随手写的,没有测试过 呵呵,就是这么个思路吧
你可以先进行ORDER BY,在SELECT TOP
SELECT TOP 20 * FROM
(
SELECT * FROM [TableName] WHERE [id]='条件' ORDER BY Time DESC}
随手写的,没有测试过 呵呵,就是这么个思路吧
#4
3楼的应该是正确的
#5
en
#6
3楼正解
#7
正解?自己测试下就知道了
楼主开始理解的对
结果不是你要的也许哪里没看好的原因
楼主开始理解的对
结果不是你要的也许哪里没看好的原因
#8
楼主的语句哪里错了 ?
#9
执行顺序应该没错,是不是其他的问题啊
#10
应该是一条一条的语句读,如果满足就留下来不行的话就删除,找到20条以后就结束,然后把这些记录按时间排序,如果你的记录总数不够20条的话,应该是找到几条就几条。
#11
可能是ORDER BY [Time] DESC问题,也许是没有唯一性,也许Time是特殊名字没有用[],也许和数据库有关系
我还是觉的
1.[id]='条件'
2.ORDER BY Time DESC
3.TOP 20
我还是觉的
1.[id]='条件'
2.ORDER BY Time DESC
3.TOP 20
#12
xuexi
#13
没达到20条前的我没注意正不正确,不过现在记录多后,我发现刚添加的记录没能显示出来,所以才有上一问
#14
;回复 3楼:
那个Time我也加了括号了,只是发贴时一时忘了,因为加括号是我的习惯,感觉这样可以让DBMS更快解释识别语句
回复 10楼:
如果真的是从第一条开始找到第20条,然后就结束的话,那就证明了是先执行SELECT TOP 20这个子句了.
那我问下大家哦,现在有个表,表里放存着发表的文章的记录,其中有一个字段为ReadCounts,就是文章的阅读次数,int类型的
现在我想问一下,如果我要把表里的文章根据ReadCounts来排序,也就是点击率最高的显示出来,不要多,只要点击率最高的前20条就得了,如果是你们,你们怎样写SQL语句????当然,因为可能表记录会比较多,如果用嵌套查询,是否是会很慢很慢?
那个Time我也加了括号了,只是发贴时一时忘了,因为加括号是我的习惯,感觉这样可以让DBMS更快解释识别语句
回复 10楼:
如果真的是从第一条开始找到第20条,然后就结束的话,那就证明了是先执行SELECT TOP 20这个子句了.
那我问下大家哦,现在有个表,表里放存着发表的文章的记录,其中有一个字段为ReadCounts,就是文章的阅读次数,int类型的
现在我想问一下,如果我要把表里的文章根据ReadCounts来排序,也就是点击率最高的显示出来,不要多,只要点击率最高的前20条就得了,如果是你们,你们怎样写SQL语句????当然,因为可能表记录会比较多,如果用嵌套查询,是否是会很慢很慢?
#15
#16
谢谢11楼
明天中午上来结贴
明天中午上来结贴
#17
有这事,还真没有注意,待会测试下。
#18
1.[id]='条件'
2.ORDER BY Time DESC
3.TOP 20
原因可呢是:TOP语句可以过滤掉有重复的语句!
还得加上个关键字!具体给忘了!你可以去搜索一下TOP 语法!验证一下!
2.ORDER BY Time DESC
3.TOP 20
原因可呢是:TOP语句可以过滤掉有重复的语句!
还得加上个关键字!具体给忘了!你可以去搜索一下TOP 语法!验证一下!
#1
你什么数据库,
1.[id]='条件'
2.ORDER BY Time DESC
3.TOP 20
难道不对?
1.[id]='条件'
2.ORDER BY Time DESC
3.TOP 20
难道不对?
#2
Time、Content、Name等名字要注意
ORDER BY [Time] DESC
SELECT TOP 20 * FROM [TableName] WHERE [id]='条件' ORDER BY [Time] DESC
试一试
ORDER BY [Time] DESC
SELECT TOP 20 * FROM [TableName] WHERE [id]='条件' ORDER BY [Time] DESC
试一试
#3
应该是先执行TOP20,然后ORDER BY
你可以先进行ORDER BY,在SELECT TOP
SELECT TOP 20 * FROM
(
SELECT * FROM [TableName] WHERE [id]='条件' ORDER BY Time DESC}
随手写的,没有测试过 呵呵,就是这么个思路吧
你可以先进行ORDER BY,在SELECT TOP
SELECT TOP 20 * FROM
(
SELECT * FROM [TableName] WHERE [id]='条件' ORDER BY Time DESC}
随手写的,没有测试过 呵呵,就是这么个思路吧
#4
3楼的应该是正确的
#5
en
#6
3楼正解
#7
正解?自己测试下就知道了
楼主开始理解的对
结果不是你要的也许哪里没看好的原因
楼主开始理解的对
结果不是你要的也许哪里没看好的原因
#8
楼主的语句哪里错了 ?
#9
执行顺序应该没错,是不是其他的问题啊
#10
应该是一条一条的语句读,如果满足就留下来不行的话就删除,找到20条以后就结束,然后把这些记录按时间排序,如果你的记录总数不够20条的话,应该是找到几条就几条。
#11
可能是ORDER BY [Time] DESC问题,也许是没有唯一性,也许Time是特殊名字没有用[],也许和数据库有关系
我还是觉的
1.[id]='条件'
2.ORDER BY Time DESC
3.TOP 20
我还是觉的
1.[id]='条件'
2.ORDER BY Time DESC
3.TOP 20
#12
xuexi
#13
没达到20条前的我没注意正不正确,不过现在记录多后,我发现刚添加的记录没能显示出来,所以才有上一问
#14
;回复 3楼:
那个Time我也加了括号了,只是发贴时一时忘了,因为加括号是我的习惯,感觉这样可以让DBMS更快解释识别语句
回复 10楼:
如果真的是从第一条开始找到第20条,然后就结束的话,那就证明了是先执行SELECT TOP 20这个子句了.
那我问下大家哦,现在有个表,表里放存着发表的文章的记录,其中有一个字段为ReadCounts,就是文章的阅读次数,int类型的
现在我想问一下,如果我要把表里的文章根据ReadCounts来排序,也就是点击率最高的显示出来,不要多,只要点击率最高的前20条就得了,如果是你们,你们怎样写SQL语句????当然,因为可能表记录会比较多,如果用嵌套查询,是否是会很慢很慢?
那个Time我也加了括号了,只是发贴时一时忘了,因为加括号是我的习惯,感觉这样可以让DBMS更快解释识别语句
回复 10楼:
如果真的是从第一条开始找到第20条,然后就结束的话,那就证明了是先执行SELECT TOP 20这个子句了.
那我问下大家哦,现在有个表,表里放存着发表的文章的记录,其中有一个字段为ReadCounts,就是文章的阅读次数,int类型的
现在我想问一下,如果我要把表里的文章根据ReadCounts来排序,也就是点击率最高的显示出来,不要多,只要点击率最高的前20条就得了,如果是你们,你们怎样写SQL语句????当然,因为可能表记录会比较多,如果用嵌套查询,是否是会很慢很慢?
#15
#16
谢谢11楼
明天中午上来结贴
明天中午上来结贴
#17
有这事,还真没有注意,待会测试下。
#18
1.[id]='条件'
2.ORDER BY Time DESC
3.TOP 20
原因可呢是:TOP语句可以过滤掉有重复的语句!
还得加上个关键字!具体给忘了!你可以去搜索一下TOP 语法!验证一下!
2.ORDER BY Time DESC
3.TOP 20
原因可呢是:TOP语句可以过滤掉有重复的语句!
还得加上个关键字!具体给忘了!你可以去搜索一下TOP 语法!验证一下!