MySQL-如何为存储过程返回多于1行

用户名

帮助我需要有关我要制作的存储过程的帮助。

我希望该程序按userame退还所有礼品卡,该礼品卡将在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的内容,但是仅使用参数中给定用户名中的特定用户ID。

赫尔格姆

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

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

上面查询的dateadiff部分不是子查询,因此我对为什么您认为这是问题感到困惑。如果仅在执行其他具有子查询的代码的情况下将select放入其中,以显示结果,那么您将查看该数据以确定所需的内容。如果需要所有这些,则需要使用子查询更改代码以使用联接而不是子查询。如果只想要一个,则需要确定条件或聚集函数将在何处获取所需的记录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章