我有这个查询与mysql:
select * from table1 LIMIT 10,20
Run Code Online (Sandbox Code Playgroud)
我怎么能用Microsoft sql做到这一点?
当我使用Zend Framework的数据库组件时,我们尝试抽象LIMIT
MySQL,PostgreSQL和SQLite支持的子句的功能.也就是说,创建查询可以这样做:
$select = $db->select();
$select->from('mytable');
$select->order('somecolumn');
$select->limit(10, 20);
Run Code Online (Sandbox Code Playgroud)
当数据库支持时LIMIT
,这将生成如下SQL查询:
SELECT * FROM mytable ORDER BY somecolumn LIMIT 10, 20
Run Code Online (Sandbox Code Playgroud)
对于不支持的数据库品牌来说,这更复杂LIMIT
(顺便说一句,该子句不是标准SQL语言的一部分).如果可以生成行号,则将整个查询作为派生表,并在外部查询中使用BETWEEN
.这是Oracle和IBM DB2的解决方案.Microsoft SQL Server 2005具有类似的行号功能,因此可以这样编写查询:
SELECT z2.*
FROM (
SELECT ROW_NUMBER OVER(ORDER BY id) AS zend_db_rownum, z1.*
FROM ( ...original SQL query... ) z1
) z2
WHERE z2.zend_db_rownum BETWEEN @offset+1 AND @offset+@count;
Run Code Online (Sandbox Code Playgroud)
但是,Microsoft SQL Server 2000没有此ROW_NUMBER()
功能.
所以我的问题是,你能想出一种方法来模拟LIMIT
Microsoft SQL Server 2000中的功能,只使用SQL吗?不使用游标或T-SQL或存储过程.它必须支持LIMIT
count和offset 两个参数.使用临时表的解决方案也是不可接受的.
编辑:
MS SQL …
如何将Resultset对象转换为JSP上的分页视图?
例如,这是我的查询和结果集:
pst = con.prepareStatement("select userName, job, place from contact");
rs = pst.executeQuery();
Run Code Online (Sandbox Code Playgroud) 我有一张MyISAM表,有28,900个人.我正在以1500块为单位处理它,这样的查询:
SELECT * FROM table WHERE id>0 LIMIT $iStart,1500
Run Code Online (Sandbox Code Playgroud)
然后我循环这个并每次增加$ iStart 1500.
问题是在某些情况下查询返回相同的行.例如,LIMIT 0,1500查询返回与LIMIT 28500,1500查询相同的一些行.
如果我没有对行进行排序,我可以不期望使用LIMIT进行分页吗?
(当这些查询发生时,表是静态的,没有其他任何会改变其行的查询).
我想找到解决现实问题的不同方法:想象一下比赛或比赛,用户收集积分.您必须构建一个查询以显示具有最佳"n"分数的用户列表.
我正在做一个例子来澄清.让我们说这是用户表,获得的积分:
UserId - Points
1 - 100
2 - 75
3 - 50
4 - 50
5 - 50
6 - 25
Run Code Online (Sandbox Code Playgroud)
如果我想要前3个分数,结果将是:
UserId - Points
1 - 100
2 - 75
3 - 50
4 - 50
5 - 50
Run Code Online (Sandbox Code Playgroud)
这可以在视图或存储过程中实现,如您所愿.我的目标数据库是Sql Server.实际上我解决了这个问题,但我认为有不同的方法来获得结果...比我的更快或更有效率.
我想从表中选择A和B之间的行.该表至少包含A行,但可能少于B行.例如,如果A = 2,B = 5且表有3行,则应返回第2行和第3行.
我怎么能在这样的范围内得到行?
我正在使用Microsoft SQL Server 2008.
我想知道你是否可以做这样的事情是Microsoft SQL Server 2k8 R2
假设我有一个返回100行数据的查询.
他们是一种可以传递一些变量的方法,例如@lower_limit和@upper_limit.
然后我希望查询记录下限和上限之间的行
例如:
@lower_limit = 5
@upper_limt 10
Run Code Online (Sandbox Code Playgroud)
会从100条记录中返回5-10行.
我第一次遇到在MSSQL中使用LIMIT子句的问题时很困惑.无法让它如何使分页脚本工作.
我想使用LIMIT子句和额外的WHERE和ORDERY BY条件.欢迎任何帮助!
这是我的MySQL查询:
$query = mysql_query("SELECT FLD_NAME, FLD_AGE FROM TBL_USERS WHERE FLAG='1' ORDER BY FLD_AGE DESC LIMIT 0,50");
//rows_per_page = 50;
Run Code Online (Sandbox Code Playgroud)
如何将此MySQL查询转换为MSSQL查询?
提前致谢!
我有一个问题:
SELECT
Segment_ID = Segment_ID.Segment_ID,
Sprav_093.Name as Road_Wear
FROM dbo.Road
LEFT JOIN Segment_ID ON Road.Road_ID = Segment_ID.Road_ID
LEFT JOIN Driveway_Pavement ON Segment_ID.Segment_ID = Driveway_Pavement.Segment_ID
LEFT JOIN Sprav_093 ON Driveway_Pavement.Kod_Spr093 = Sprav_093.Kod_Spr
Run Code Online (Sandbox Code Playgroud)
工作正常.有几个行与同一Segment_ID
表Driveway_Pavement
.所以我想要获得这些行中的第一行.我该怎么做?