为什么存储过程在包含的查询不';MySQL中的t?
我已经在MySQL(服务器版本:5.0.83-community)中创建了一个存储过程,如下所示。当我尝试调用它时,我得到了一个非常奇怪的输出,它与我尝试在过程之外调用查询时有很大不同。为了说明我的意思,我将两个不同的调用联合起来,以便您可以看到非常不同的输出 我知道,如中所述,如果任何参数为NULL,CONCAT将返回NULL变量,但我真的不明白为什么它在以下一种情况下返回NULL,而在另一种情况下则不返回NULL。事实上,两个调用应该返回完全相同的结果。你知道为什么会这样吗?(分隔符//由phpMyAdmin使用-因此奇怪地缺少声明) 注意:我也看过,但没有一个能让我得出任何令人惊讶的结论。这篇文章对我也没有帮助,因为MySQL在我尝试调用setANSI_NULLS时抛出了这个错误#1193-未知系统变量“ANSI_NULLS”为什么存储过程在包含的查询不';MySQL中的t?,mysql,stored-procedures,Mysql,Stored Procedures,我已经在MySQL(服务器版本:5.0.83-community)中创建了一个存储过程,如下所示。当我尝试调用它时,我得到了一个非常奇怪的输出,它与我尝试在过程之外调用查询时有很大不同。为了说明我的意思,我将两个不同的调用联合起来,以便您可以看到非常不同的输出 我知道,如中所述,如果任何参数为NULL,CONCAT将返回NULL变量,但我真的不明白为什么它在以下一种情况下返回NULL,而在另一种情况下则不返回NULL。事实上,两个调用应该返回完全相同的结果。你知道为什么会这样吗?(分隔符//由p
DROP PROCEDURE `GetVoteID`//
CREATE DEFINER=`u1037413_manager`@`%` PROCEDURE `GetVoteID`(IN minimum_votes INT(11), IN current_round INT(11), INOUT vote_id CHAR(11))
BEGIN
SET @eliminated_candidates := (
SELECT GROUP_CONCAT(CONVERT(vote_candidate, CHAR(11)))
FROM vote_final
WHERE votes = minimum_votes
AND round_id = current_round
);
SELECT GROUP_CONCAT(CONVERT(vote_id, CHAR(11))) INTO vote_id
FROM votes_copy
WHERE FIND_IN_SET(@eliminated_candidates, vote_candidate_1) != 0;
END
CALL GetVoteID('5','1',@vote_id);
SELECT *
FROM (
(
SELECT @vote_id vote_id
) UNION (
SELECT GROUP_CONCAT(CONVERT(vote_id, CHAR(11)))
FROM votes_copy
WHERE FIND_IN_SET((
SELECT GROUP_CONCAT(CONVERT(vote_candidate, CHAR(11)))
FROM vote_final
WHERE votes = '5'
AND round_id = '1'
), vote_candidate_1) != 0
)
) t;
产出:
+--------------+
| vote_id |
+--------------+
| NULL | <- incorrect result
+--------------+
| 2,8,33,44,48 | <- correct result
+--------------+
+--------------+
|投票人|
+--------------+
|空|您能提供一些测试数据吗?除了问题中提供的测试数据之外,您还需要什么类型的测试数据?像sqlfiddle?sqlfiddle会有用的。好的。我删除了我以前的评论,因为我没有让fidde正常工作,但现在我已经设法至少让过程进入模式生成器。但是我不能让它工作。我已经把它注释掉了-如果你知道如何让它工作,请让我知道。以下几点建议:避免将变量命名为表的列,并且超出了变量INOUT
的长度(您必须计算要分配的长度)。要测试是否正常工作,请更改:。。。INOUT vote_id CHAR(11).
by。。。INOUT投票id字符(50).
和。。。字符(11)))转换为投票id…
by。。。CHAR(11)))转换为存储过程中的_vote_id…
。看见