【发布时间】:2015-01-19 22:34:00
【问题描述】:
帮助我需要关于我正在尝试创建的存储过程的帮助。
我希望通过用户名退回所有礼品卡的程序,该用户名将在 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。
【问题讨论】:
-
您确定您的
LoginID和UserID查询只返回一行吗? -
@user3896882 我想看看如果您将
LoginID和UserID都包装在max()函数中,错误是否会消失,例如:SET LoginID = (SELECT max(LoginID) from Login WHERE UserName = username);。您的错误是引用了一个子查询,并且您的两个子查询都没有“保证”返回单行,这可能是数据库所抱怨的。 -
@Dan 这行不通,因为每个用户都有不同的 loginId 请参阅tinypic.com/r/dfin1f/8
-
这项工作虽然
CREATE DEFINER=giftcard@%` 程序CheckExpiryDate(IN userid int(24)) BEGIN SELECT * FROM Giftcard WHERE DATEDIFF(ExpiryDate, now()) Giftcard.UserID= 用户 ID; END`
标签: mysql sql stored-procedures subquery procedure