MySQL 错误 1172 - 结果包含多于一行

bfa*_*tto 9 mysql stored-procedures

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

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

我理解错误:我在做一个SELECT (...) INTO (var list),因此查询需要返回单行。当我使用LIMIT 1or 时SELECT 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;
Run Code Online (Sandbox Code Playgroud)

Nav*_*tee 5

我遇到了类似的问题,当我放置表别名时,它就像一个魅力。

SELECT t.tax_amount,t.tax_percentage FROM nepse_tax t
Run Code Online (Sandbox Code Playgroud)


Ata*_*sef 1

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

MySQL 错误 1172 - 结果包含多行

然后我看到了这个问题:

mysql 存储过程错误(1172,“结果由多行组成”)

但这不是我想问的。LIMIT 1;——没有达到我的预期。它只会返回所有情况的第一行。

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

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

不知道你遇到的情况是不是同样的情况。无论如何,尝试一下。

谢谢。