【问题标题】:Basic stored produre returns error基本存储过程返回错误
【发布时间】:2017-12-19 14:00:23
【问题描述】:

我尝试在 MySQL Workbench 中编写我的第一个存储过程,但不知何故它不起作用。这是我的代码:

CREATE DEFINER=`root`@`localhost` PROCEDURE `check_completeness`()
BEGIN
    -- drop table
    DROP TABLE IF EXISTS `check_language`;

    -- create table
    CREATE TABLE `check_language`(
        `id` int,
        `lang` varchar(8),
        `count` int,
        `complete` boolean
    );

    INSERT INTO `check_language` 
            (`id`, `lang`, `count`, `complete`) 
        VALUES 
            (
                NULL, 
                (SELECT tbl_language_code from `vw_qa_envi` GROUP BY tbl_language_code), 
                (SELECT COUNT(tbl_language_code)  from `vw_qa_envi` GROUP BY tbl_language_code),
                (SELECT IF(COUNT(tbl_language_code) = 148, 1, 0) FROM `vw_qa_envi` GROUP BY tbl_language_code)
            );

END

当我单独执行每个 SQL 查询时,它运行良好。但是当我尝试执行整个存储过程时,它不起作用。

我收到了error code 1242

子查询返回多于 1 行。

【问题讨论】:

  • 错误消息是您可以获得的更具体/更有用的消息之一...您的所有子查询都可以/将返回多个结果。我不知道如何帮助你,因为我不知道你想在这里做什么。
  • 检查这些查询 ` (SELECT tbl_language_code from vw_qa_envi GROUP BY tbl_language_code), (SELECT COUNT(tbl_language_code) from vw_qa_envi GROUP BY tbl_language_code), (SELECT IF(COUNT(tbl_language_code) = 148, 1, 0) FROM vw_qa_envi GROUP BY tbl_language_code)` 分别并确保每个返回单个值
  • 错误信息说明了一切。我们还能如何向您解释?运行每个子查询。然后其中一项或多项返回多于 1 行。

标签: mysql sql stored-procedures mysql-workbench


【解决方案1】:

您可以尝试在子查询中设置 LIMIT 1 例子: SELECT tbl_language_code fromvw_qa_enviGROUP BY tbl_language_code LIMIT 1

但问题仍然存在,因为您没有说元素是否正确,因为它返回了许多元素..

【讨论】:

    【解决方案2】:

    您尝试使用values () 子句insert 一行,但您的查询返回多于1 行。您应该直接指定查询,而不是 values () 子句。并且不要将其拆分为多个查询,使用一个!

    试试这个:

    INSERT INTO `check_language` (`lang`, `count`, `complete`) 
    SELECT tbl_language_code, COUNT(tbl_language_code), IF(COUNT(tbl_language_code) = 148, 1, 0)
    FROM `vw_qa_envi` 
    GROUP BY tbl_language_code
    

    当您只是将NULL 插入列中时,只需将该列排除在外。这就是我删除id 列的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-15
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2015-05-17
      • 2016-01-21
      相关资源
      最近更新 更多