MySQL错误1172 - 结果由多行组成

时间:2012-02-29 22:55:46

标签: mysql stored-procedures

在存储过程中运行查询时,我从MySQL收到此错误:

  

错误代码:1172   结果包含多行

我理解错误:我正在执行SELECT (...) INTO (var list),因此查询需要返回单行。当我使用LIMIT 1SELECT DISTINCT时,错误就会消失。

但是:当我手动运行原始查询(没有LIMITDISTINCT)时,会返回单行。所以我怀疑我可能遇到了MySQL错误。有谁知道会发生什么?

修改

我按照要求发布了SQL。以下划线开头的所有内容都是在过程内部先前声明的变量。当我测试它时,我将_cd_pai_vc替换为导致问题的记录的ID。

SELECT  a.valor,    IFNULL(p.valor, 0), fn_cd2alias(ra.cd_registro),    fn_cd2alias(IFNULL(p.valor,0))
INTO    _valor,     _cd_pai_vc,         _alias_verbete,                 _alias_pai
FROM dados_registros ra
    INNER JOIN dados_varchar255 a
    ON a.cd_registro = ra.cd_registro
        AND a.fl_excluido = 0
        AND a.alias = 'vc-verbetes-termo'
    LEFT OUTER JOIN dados_registros rp
        INNER JOIN dados_int p
        ON p.cd_registro = rp.cd_registro
            AND p.fl_excluido = 0
            AND p.alias = 'vc-remissoes-termo referenciado'
        INNER JOIN dados_int pt
        ON pt.cd_registro = rp.cd_registro
            AND pt.fl_excluido = 0
            AND pt.alias = 'vc-remissoes-tipo remissao'
            AND fn_cd2alias(pt.valor) = 'hierarquica'
    ON ra.cd_registro = rp.cd_entidade
        AND rp.fl_excluido = 0
        AND fn_cd2alias(rp.cd_modulo) = 'vc-remissoes'
WHERE ra.cd_registro = _cd_pai_vc 
    AND ra.fl_excluido = 0;

5 个答案:

答案 0 :(得分:2)

我遇到了这个问题,发现当我在select语句中使用表名和列名时它就消失了,甚至是简单的。

答案 1 :(得分:1)

我有类似的问题,当我把表别名时,它就像一个魅力。

SELECT t.tax_amount,t.tax_percentage FROM nepse_tax t

答案 2 :(得分:0)

我在mysql中遇到过同样的错误。

MySQL错误1172 - 结果由多行

组成

然后我看到了这个问题:

mysql stored procedure error (1172, 'Result consisted of more than one row')

但这不是我要问的问题。 LIMIT 1; - 不符合我的期望。它只返回所有情况的第一行。

然后我开始深入研究这个,现在我得到了解决方案。

这种情况发生是因为存储过程的代码返回多行,这是因为我的代码[我为存储过程编写的代码]中有很多extra spaces and tab characters,当我删除它们只有一个/两个适当的tab chars-它就像一个飞行机器

我不知道你是否有同样的经历。无论如何试一试。

谢谢。

答案 3 :(得分:0)

我遇到了同样的问题,纳瓦·博盖特(Nava Bogatee)的解决方案就像一个魅力, 以下是该过程的一部分

select attendance
into brb
from Stud
where Rno like rno;

这没用,我不知道为什么。 然后我将其更改为

select t.attendance
into brb
from Stud t
where t.Rno like rno;

成功了。 我猜由于某种原因,Rno列返回表中的所有值,这就是为什么多行错误。

答案 4 :(得分:0)

我遇到的问题是IN参数,并且列名都相同,所以更改了IN参数名,它起作用了