0

我在面试中被问到这个问题,这似乎很常见,但我无法得到或想出一些解决方案,所以需要你的帮助

你能告诉我使用普通sql从表中检索前1行的方法,没有rownum、rowid、top或limit。

谢谢

4

3 回答 3

3

没有顶部的查询示例。

select * from Contests
Where ContestId = (SELECT MAX(ContestId) FROM Contests)
于 2013-07-04T18:54:58.463 回答
2

row_number()您可以使用函数和子查询使用 ANSI 标准 SQL 执行此操作:

select t.*
from (select t.*,
             row_number() over (order by <however you define the "top" row>) as seqnum
      from t
     ) t
where t = 1;

这假设您有某种订购方法来指定“顶”行是什么。如果没有order by子句,任何行都可以。

*在外部查询中使用了。严格来说,您只想包含表中的列,不包括seqnum.

于 2013-07-04T18:52:02.597 回答
2

在 MS SQL Server 上,您可以使用SET ROWCOUNT n语句。如:

SET ROWCOUNT 1
SELECT * FROM Contests

它:

“导致 SQL Server 在返回指定的行数后停止处理查询。”

PS:如果我正确理解限制是 MySQL 中的 LIMIT 子句,应该使用它。

于 2013-07-04T19:50:27.093 回答