我一直收到这个错误: 结果包含多行
我有这个功能:
DROP FUNCTION IF EXISTS db.GetUserIDByCourseID;
CREATE FUNCTION db.`GetUserIDByCourseID`(CourseID int) RETURNS int(11)
BEGIN
SELECT (c.user_id + COALESCE(pi.user_id, 0) + COALESCE(p.user_id, 0))
INTO @user_id
FROM courses c
LEFT JOIN users u
ON u.user_id = c.user_id
LEFT JOIN partners p
ON p.partner_id = c.partner_id
LEFT JOIN partners_individual pi
ON pi.individual_id = c.individual_id;
WHERE c.course_id = CourseID;
SELECT user_type_id
INTO @user_type_id
FROM users
WHERE user_id = @user_id;
RETURN @user_type_id;
END;
答案 0 :(得分:2)
当SELECT
进入变量时,结果集必须只包含一行。在您当前的示例中,第一个select语句似乎可能会返回多行;你可以通过手动执行它来检查那些给你带来麻烦的CourseID
值。该怎么办我不能说,因为这取决于你的设计细节。
答案 1 :(得分:0)
您可以尝试SELECT TOP 1
。您的SELECT
语句中的任何一个或两个都可能返回多行。我认为您需要坐下来1:了解您的数据模型,2:了解您的数据。
要更清楚地了解发生了什么,请自行运行这些查询并查看结果集:
SELECT (c.user_id + COALESCE(pi.user_id, 0) + COALESCE(p.user_id, 0))
FROM courses c
LEFT JOIN users u
ON u.user_id = c.user_id
LEFT JOIN partners p
ON p.partner_id = c.partner_id
LEFT JOIN partners_individual pi
ON pi.individual_id = c.individual_id;
WHERE c.course_id = CourseID;
SELECT user_type_id
FROM users
WHERE user_id = @user_id;