我尝试在 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/