在存储过程中运行查询时,我从MySQL收到此错误:
错误代码:1172 结果包含多行
我理解错误:我正在执行SELECT (...) INTO (var list)
,因此查询需要返回单行。当我使用LIMIT 1
或SELECT DISTINCT
时,错误就会消失。
但是:当我手动运行原始查询(没有LIMIT
或DISTINCT
)时,会返回单行。所以我怀疑我可能遇到了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;
答案 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参数名,它起作用了