【问题标题】:How to put limit in select statement in inner query while inserting in temp table插入临时表时如何在内部查询中的选择语句中设置限制
【发布时间】:2018-12-23 17:01:14
【问题描述】:

我想做一个查询,从另一个表中插入数据,动态限制在运行时生成,我该怎么做

这是我在临时表中插入数据以进行会话的过程的一部分,因此我可以处理其他查询,我已经通过重复语句完成了该操作,但这需要更长的时间,然后我想要这样的东西,但 MySQL 确实不允许有限制的变量。

我在这里使用 int 进行演示。

**SET @counter = 10; #FOUND_ROWS();
SET @bill_id = 1; #last_insert_id(); 
INSERT INTO billingids (bill_id) (
    SELECT id from cfx_billing WHERE id >= @bill_id LIMIT @counter
);**

但它不起作用然后我尝试了准备语句

**SET @counter = 10; #FOUND_ROWS();
SET @bill_id = 1; #last_insert_id(); 
PREPARE STMT FROM "SELECT id from cfx_billing WHERE id >= @bill_id LIMIT ?";
INSERT INTO billingids (bill_id) (
    EXECUTE STMT USING @counter
);
DEALLOCATE PREPARE stmt;**

对于 1 条语句,我收到此错误

SQL 错误 (1064):您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 '@counter 附近使用的正确语法 )' 在第 1 行。

对于2语句

SQL 错误 (1064):您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 'EXECUTE STMT USING @counter 附近使用的正确语法 )' 在第 2 行

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您不能在子查询中使用EXECUTE STMT。它必须是整个查询。

    PREPARE STMT FROM "INSERT INTO billingids (bill_id) 
      SELECT id from cfx_billing WHERE id >= @bill_id LIMIT ?";
    EXECUTE STMT USING @counter;
    

    我没有测试过这个例子,但我知道你需要准备整个语句,而不仅仅是子查询。

    【讨论】:

    • @Anupamsinghpal,我很乐意提供帮助。请记住,Stack Overflow 习惯于对有帮助的答案进行投票,并使用绿色复选标记来识别已接受的答案。
    猜你喜欢
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2011-02-13
    • 2021-02-14
    相关资源
    最近更新 更多