首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本存储产品返回错误

基本存储产品返回错误
EN

Stack Overflow用户
提问于 2017-07-14 12:49:58
回答 2查看 53关注 0票数 0

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

代码语言:javascript
复制
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

当我单独执行每个singe查询时,它的工作非常完美。但是当我尝试执行整个存储过程时,它不起作用。

我得到了一个error code 1242

子查询返回多于1行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-14 13:04:25

您尝试使用insert子句对一行进行values (),但是查询返回的行超过1行。您应该直接指定查询,而不是values ()子句。不要把它分割成多个查询,使用一个查询!

试试这个:

代码语言:javascript
复制
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列。

票数 2
EN

Stack Overflow用户

发布于 2017-07-14 12:57:01

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

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45103454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档