在临时表中插入时如何在内部查询的select语句中添加限制

时间:2018-12-23 17:01:15

标签: mysql

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

这是过程的一部分,其中我在会话的临时表中插入数据,以便我可以处理其他查询,我已经通过repeat语句完成了该操作,但是所需的时间比我希望的长,但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附近使用 )”在第二行

1 个答案:

答案 0 :(得分: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;

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