【问题标题】:MySQL returning value from a SELECT statementMySQL 从 SELECT 语句返回值
【发布时间】:2010-09-17 05:47:41
【问题描述】:

我不断收到此错误: 结果包含多于一行

我有这个功能:

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;

【问题讨论】:

  • 如果允许我进行观察,您的函数GetUserIDByCourseID 不会返回user_id,而是返回user_type_id。我认为这可能会导致调用者感到困惑。

标签: sql mysql stored-functions


【解决方案1】:

SELECT 输入变量时,结果集必须恰好包含一行。在您当前的示例中,第一个 select 语句似乎可能会返回多行;您可以通过手动执行它来检查CourseID 的值是否存在问题。我不能说该怎么做,因为这取决于你的设计细节。

【讨论】:

  • 谢谢,我错过了原帖上的这个条款 [WHERE c.course_id = CourseID;]
【解决方案2】:

你可以试试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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    相关资源
    最近更新 更多