Mysql - 如何为存储过程返回多行

时间:2015-01-19 22:34:01

标签: mysql sql stored-procedures subquery procedure

帮助我为我试图制作的存储过程提供帮助。

我希望程序按照用户框返回所有礼品卡,这些礼品卡将在3周(21)天内过期。

我已尝试过从GROUP_CONCAT到Cursor的所有内容,但它一直在告诉我

Error Code: 1242. Subquery returns more than 1 row

这是我的存储过程

CREATE DEFINER=`giftcard`@`%` PROCEDURE `CheckExpiryDate`(IN username 
VARCHAR(24))
BEGIN

Declare LoginID INT;
Declare UserID INT;

SET LoginID = (SELECT LoginID From Login WHERE `UserName` = username);
SET UserID = (SELECT UserID From User WHERE `User`.`LoginID` = LoginID);

SELECT * FROM Giftcard WHERE DATEDIFF(ExpiryDate, now()) <= 21 AND `Giftcard`.`UserID` = UserID;

END

我想要这样的东西 http://tinypic.com/r/2u7t8q9/8 但只是使用参数中给定用户名的特定用户标识。

1 个答案:

答案 0 :(得分:0)

您无法解决问题,因为您在不了解数据的情况下尝试修复SQL。

尝试修复子查询的技巧是返回多个值,以查找它将返回的实际值,并确定如何只返回一个。它可以通过聚合函数,附加的where子句,或者它可能意味着您想要所有记录,因此根本不能使用子查询。这些是业务规则选择,我们无法帮助您。

上面查询的dateadiff部分不是子查询,所以我很困惑为什么你认为这是问题。如果你只是为了显示在运行实际有子查询的其他代码时结果会是什么,那么你看一下这些数据来确定你想要什么。如果您想要所有这些,那么您需要使用子查询更改代码以使用连接而不是子查询。如果你只需要一个,你需要确定哪些条件或聚合函数可以获得你想要的记录。