代码之家  ›  专栏  ›  技术社区  ›  Aivan Monceller

MySQL从SELECT语句返回值

  •  1
  • Aivan Monceller  · 技术社区  · 15 年前

    我经常会遇到这样的错误: 结果包含多行

    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;
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   Brian Hooper    15 年前

    什么时候? SELECT 对于一个变量,结果集必须只包含一行。在您当前的示例中,第一个select语句可能会返回多行;您可以通过手动执行它来检查 CourseID

        2
  •  0
  •   JohnB    15 年前

    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;