如何使用子查询来定义 Mysql SELECT LIMIT 偏移量?

Posted

技术标签:

【中文标题】如何使用子查询来定义 Mysql SELECT LIMIT 偏移量?【英文标题】:How to use subquery to define Mysql SELECT LIMIT offset? 【发布时间】:2011-11-18 11:31:30 【问题描述】:

我一直在尝试“动态”定义查询的偏移量。

但是在执行这个查询时,我总是以 You have an error in your SQL syntax; 结束

当我用数字替换子查询时,它确实可以正常工作。具有这种形状的查询是否有问题?

SELECT LengthOfStay
FROM table1
LIMIT (SELECT CAST(COUNT(DISTINCT(LengthOfStay)) / 2 AS SIGNED) FROM table1 t1), 2;

附言。我投了它,所以我可以确保它是一个整数。

【问题讨论】:

避免痛苦,做两个查询配合,即使你成功了恕我直言,你的代码会更混乱。这只是我的看法:) 看起来像重复的How to make limit offset dynamic using only (My)SQL 【参考方案1】:

您不能将子查询用作LIMIT 参数。限制参数应该是INTEGER。您的子查询返回,嗯...基本上,一个表。

这个查询到底想达到什么目的?这个查询对我没有任何意义...

【讨论】:

【参考方案2】:

正如@michal 指出的,答案在How to make limit offset dynamic using only (My)SQL

基本上,如果您不在存储过程或准备好的语句中,则无法这样做。

如果您有一个存储过程,只需将“内部”选择的值分配给一个变量,然后在实际语句中使用它。

如果您有准备好的语句,请使用“limit ?, ?”并设置调用中的值。

【讨论】:

以上是关于如何使用子查询来定义 Mysql SELECT LIMIT 偏移量?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL在字段中使用select子查询(转)

SELECT中(非常)常用的子查询操作

mysql子查询

MySQL在SELECT子句中关联子查询

MySQL里面的子查询

mysql的分页使用子查询?