【问题标题】:mysql procedure : Result consisted of more than one row with select statementmysql 程序:结果由多于一行和 select 语句组成
【发布时间】:2018-12-25 11:21:54
【问题描述】:

我正在为我经常重复的工作创建一个程序。

其中,有一个步骤可以将一张表中的多行插入到临时表中。

CREATE TABLE `tmpUserList` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `user_type` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
      `first_name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
      `last_name` varchar(45) COLLATE utf8_unicode_ci NOT NULL
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    ..... some more queries.


        INSERT INTO  tmpUserList ( 
                SELECT  id, user_type,first_name,last_name,  from user  where  id in  (usersId) 
        );


    SELECT * FROM tmpUserList; // return the result

但它给了我错误:结果包含不止一行

【问题讨论】:

  • 这是某种寻找重复项的尝试吗?
  • @P.Salmon nope.它只是在临时表中插入一些行并通过调用过程从临时表中返回结果

标签: mysql sql procedure


【解决方案1】:

正确的INSERT SELECT 语法:

INSERT INTO tmpUserList(id, user_type,first_name,last_name)
SELECT id, user_type,first_name,last_name 
FROM user  
WHERE id IN (usersId);

如果usersId 包含多个您可以使用的值:

WHERE FIND_IN_SET(id, usersId);  -- table scan

相关:MySQL Prepared statements with a variable size variable list

【讨论】:

  • 是否会使用插入到 tmpUserList 从选择结果中插入多行?
  • @RIYAJKHAN 这正是INSERT SELECT 所做的。它将插入与独立 SELECT 返回一样多的行
  • 它给了我错误:结果包含不止一行
  • @RIYAJKHAN 你为什么不发布整个代码?您的 SP 中可能有 SELECT ... INTO 语句。
  • 我的错,在其他声明中有更正。赞成并接受@Lukasz
猜你喜欢
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
相关资源
最近更新 更多