1

このエラーが発生し続けます: 結果は複数の行で構成されていました

私はこの機能を持っています:

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;
4

2 に答える 2

2

SELECT変数を ing する場合、結果セットは正確に 1 行で構成される必要があります。現在の例では、最初の select ステートメントが複数の行を返す可能性が高いようです。問題を引き起こしているの値に対して手動で実行することで、それを確認できますCourseID。それについてどうするかは、デザインの詳細に依存するため、私は言えません。

于 2010-09-17T05:55:46.317 に答える
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;
于 2010-09-17T06:00:17.460 に答える