这是一个非常基本的MySQL问题,但我找不到答案。假设以下存储过程体;
DECLARE Existing INT DEFAULT 0;
SELECT SQL_CALC_FOUND_ROWS name FROM users WHERE id = pid LIMIT 1;
SELECT FOUND_ROWS() INTO Existing;
Select Existing;
当我运行它时,它总是返回第一个SELECT结果。但是我希望它返回最后一个(SELECT Existing)结果。这种行为是否正常?如果是这样,我怎么能改变它,因为第一个选择仅用于检查,最后一个是我需要的。
(真正的逻辑与此不同,我在这里简化了它)
答案 0 :(得分:3)
你可以这样做:
SELECT COALESCE(id/id, 0) AS Existing
FROM users
WHERE id = pid
LIMIT 1;
如果找到id
,您将返回1(id / id = 1)。如果未找到id
,则返回0(id / id为IS NULL,COALESCE将返回0)。
答案 1 :(得分:1)
问题是您用来运行存储过程的MySQL“客户端”。存储过程将返回所有查询的结果集,但客户端应支持它。您是在phpMyAdmin或其他类似客户端运行查询吗?尝试使用默认客户端调用存储过程 - 命令提示符,您将看到它返回所有查询的结果。请阅读最后一段on this page。
现在这是一些指针。现在来看看如何从过程中返回值。您可以使用OUT参数执行此操作,该参数用于将过程中的值传递回调用方。请在this page on the MySQL website上阅读更多内容 - 该页面上的示例说明了这一点。
希望这有帮助!
答案 2 :(得分:0)
您可以创建表变量,填充它,然后从中进行选择
CREATE PROCEDURE my_proc () BEGIN
CREATE TEMPORARY TABLE TempTable (myid int, myfield varchar(100));
INSERT INTO TmpTable SELECT tblid, tblfield FROM Table1;
SELECT * FROM TEMPORARY;
答案 3 :(得分:0)
仅用于调试,如果两个select sql返回列数相等,则可以使用union:
选择1,'100'联合选择'3434',2;