mysql - 基本存储过程返回错误

标签 mysql sql stored-procedures mysql-workbench

我尝试在 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 查询时,它工作得非常完美。但是当我尝试执行整个存储过程时,它不起作用。

我收到错误代码 1242

Subquery returns more than 1 row.

最佳答案

您尝试使用 values () 子句插入一行,但您的查询返回多于 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 列的原因。

关于mysql - 基本存储过程返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45103454/

相关文章:

php - php 中的堆叠 Highcharts

mysql - 基于标志的SQL查询

php - 无法重新声明先前声明的函数

sql - 没有 WHERE 只有 ORDER BY 和 LIMIT 的 PostgreSQL 查询不使用索引

java - HQL:使用聚合函数进行简单选择时出现问题

C# DatagridVIew 删除SQL日期

mysql - GROUP BY 子句中整数的含义

mysql - 检查存储过程中的查询是否成功

oracle - 如何限制oracle存储过程中的NULL输入参数

java - SimpleJdbcCall 忽略 JdbcTemplate 获取大小