【问题标题】:Using arithmetic operators and/or brackets in a LIMIT clause在 LIMIT 子句中使用算术运算符和/或括号
【发布时间】:2020-11-15 17:39:34
【问题描述】:

我在存储过程的查询中有以下小子查询。

(select f_cnt from results limit (i-1)*10,i*10)

但是有语法错误:

“(”在这个位置无效,需要一个标识符

那么,问题是:我是否可以在 LIMIT 子句中使用括号和/或算术运算符?

文档说我可以在存储过程的 LIMIT 子句中使用局部变量。我真的需要为这种情况声明和设置不同的变量吗?

以防万一,link 存储过程的代码。

【问题讨论】:

    标签: mysql sql stored-procedures limit


    【解决方案1】:

    那时你不能做算术

    那就这样吧

    SET @sql := CONCAT("SELECT * FROM TEsttable WHERE id In(select f_cnt from results limit ",(i-1) * 10,",",i*10,")");
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    会产生什么

    SELECT * FROM TEsttable WHERE id In(select f_cnt from results limit 90,100)
    

    【讨论】:

    • ehm... 好吧,我想我明白你在建议什么样的机制。但我还不知道这些语句是如何工作的。实际上,我的主题不是问题,因为我已经通过了带有两个附加变量的语法错误。不过,关于LIMIT 子句的问题是开放的。
    • @Gennadiy 像这样的准备好的语句像任何其他准备好的语句一样工作,您可以在查询中添加您想要数据的地方?并将变量添加到执行部分,请参见 dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html only
    • 这看起来很有用,我会深入学习。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多