我想构建一个查询,在表中显示所有结果,但从表的开头偏移5.据我所知,MySQL LIMIT
需要一个限制和一个偏移量.有没有办法做到这一点?
来自LIMIT上的MySQL手册:
要从特定偏移量检索所有行直到结果集的末尾,可以使用一些大数字作为第二个参数.此语句检索从第96行到最后一行的所有行:
SELECT * FROM tbl LIMIT 95, 18446744073709551615;
正如您所提到的,LIMIT是必需的,因此您需要使用最大限制,即18446744073709551615(最大未签名BIGINT)
SELECT * FROM somewhere LIMIT 18446744073709551610 OFFSET 5
正如其他答案中所述,MySQL建议使用18446744073709551615作为限制中的记录数,但请考虑一下:如果您获得18,446,744,073,709,551,615条记录,您会怎么做?事实上,如果你有1,000,000,000条记录,你会怎么做?
也许你确实需要超过10亿条记录,但我的观点是你想要的数字有一些限制,而且它不到18个数量级.为了稳定性,优化和可能的可用性,我建议对查询设置一些有意义的限制.这也可以减少任何从未见过这个神奇数字的人的混淆,并且还可以至少传达您愿意同时处理多少条记录的额外好处.
如果你真的必须从你的数据库中获得所有18个quintillion记录,也许你真正想要的是以1亿的增量获取它们并循环1840亿次.
另一种方法是选择自动增量色谱柱,然后使用HAVING过滤它.
SET @a := 0; select @a:=@a + 1 AS counter, table.* FROM table HAVING counter > 4
但我可能会坚持使用上限方法.