【问题标题】:Any known issue with INSERT INTO .. SELECT within a MySQL stored procedure?MySQL 存储过程中 INSERT INTO .. SELECT 的任何已知问题?
【发布时间】:2011-11-10 11:41:25
【问题描述】:

我正在尝试从 MySQL 存储过程中调用 INSERT INTO ... SELECT 语句。

我总是从 MySQL 收到这个错误:ERROR 1242 (21000): Subquery returns more than 1 row

我的 SELECT 语句肯定会返回多行,但上面的 INSERT 语句不会。

我错过了什么?

代码:

PREPARE query FROM 'INSERT INTO tmpTable (client_program, ref_client, ref_household) SELECT ref_client_program, ref_member, \"84k3\" FROM client_program_members WHERE ref_client_program IN (74)';
EXECUTE query ;
DEALLOCATE PREPARE query;

【问题讨论】:

标签: mysql stored-procedures insert


【解决方案1】:

不确定,但试试这条线 -

PREPARE query FROM 'INSERT INTO `tmpTable`(client_program, ref_client, ref_household) SELECT ref_client_program, ref_member, ''84k3'' FROM client_program_members WHERE ref_client_program IN(74)';

【讨论】:

    【解决方案2】:

    确实可以做一个insert ... select
    您可以从该选择中获得多行。

    下面的代码应该可以工作。

    DECLARE sql varchar(1000);
    SET sql = CONCAT("INSERT INTO tmpTable (client_program, ref_client, ref_household) "
                   , " SELECT ref_client_program, ref_member, \'84k3\' "
                   , " FROM client_program_members WHERE ref_client_program = ? ");
    
    PREPARE query FROM sql;
    SET @client_prog = 74; 
    EXECUTE query USING @client_prog;
    DEALLOCATE PREPARE query; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-07
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      相关资源
      最近更新 更多