我在面试中被问到这个问题,这似乎很常见,但我无法得到或想出一些解决方案,所以需要你的帮助
你能告诉我使用普通sql从表中检索前1行的方法,没有rownum、rowid、top或limit。
谢谢
我在面试中被问到这个问题,这似乎很常见,但我无法得到或想出一些解决方案,所以需要你的帮助
你能告诉我使用普通sql从表中检索前1行的方法,没有rownum、rowid、top或limit。
谢谢
没有顶部的查询示例。
select * from Contests
Where ContestId = (SELECT MAX(ContestId) FROM Contests)
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
.
在 MS SQL Server 上,您可以使用SET ROWCOUNT n语句。如:
SET ROWCOUNT 1
SELECT * FROM Contests
它:
“导致 SQL Server 在返回指定的行数后停止处理查询。”
PS:如果我正确理解限制是 MySQL 中的 LIMIT 子句,应该使用它。