2012-05-07 24 views
1

サブクエリに問題があります。Mysqlサブクエリの問題

私は地元のサイクリングクラブで10回のタイムトライアルリーグを制覇しています。入力した人が自分の時間をテーブルに記録している週リーグがあります。

ここに私のストアドプロシージャがあります。回、ユーザーIDとcourseID

を格納

BEGIN 
    #Routine body goes here... 
     DROP TEMPORARY TABLE IF EXISTS tbl_Temp; 

     CREATE TEMPORARY TABLE tbl_Temp (
     UserId int DEFAULT 0, 
     TotalTime DECIMAL (10,2), 
     EventCount int DEFAULT 0, 
     FullName VARCHAR(255), 
     Marshalled TINYINT(2) DEFAULT 0, 
     HillClimb TINYINT(2) DEFAULT 0, 
     Year INT(10) 
     ); 

     INSERT INTO tbl_Temp (UserID,Year) 
     SELECT DISTINCT userId,YEAR(date) 
     FROM tbl_series; 

     /* ---- EVENT COUNT */ 
     UPDATE tbl_Temp AS c,tbl_series AS t 
     SET c.EventCount = (SELECT COUNT(userId) FROM tbl_series WHERE (UserID = t.userId)) 
     WHERE c.UserID = t.userId; 

     /* ---- get the times into a temp table */ 


     /* ---- TOTAL TIME */ 
     UPDATE tbl_Temp AS c,tbl_series AS t 
     SET c.TotalTime = (
      /*SELECT SUM(A.Time) FROM (
        SELECT Time FROM tbl_series 
        WHERE (UserID = t.userId) 
        LIMIT 10 
       ) AS A*/ 
       SELECT SUM(Time) FROM tbl_series 
       WHERE (userId = t.UserId) 
     ) 
     WHERE c.UserID = t.userId; 

     /* ---- Name */ 
     UPDATE tbl_Temp AS c,tbl_users AS t 
     SET c.FullName = (
       SELECT NAME 
       FROM tbl_users 
       WHERE (userId = t.UserId) 
     ) 
     WHERE (c.userId = t.UserId); 

     /* ---- Marshalled */ 
     /* will need to add in a new table for marshalled so isn't lost over the coming years */ 
     UPDATE tbl_Temp AS c,tbl_users AS t 
     SET c.Marshalled = (
       SELECT marshalled 
       FROM tbl_users 
       WHERE (userId = t.UserId) 
     ) 
     WHERE (c.userId = t.UserId); 

     /* ---- Hill Climb */ 
     UPDATE tbl_Temp AS c,tbl_users AS t 
     SET c.HillClimb = (

      SELECT Count(tbl_series.SeriesID) 
      FROM tbl_series 
      INNER JOIN tbl_series_courses ON tbl_series.CourseID = tbl_series_courses.SeriesCourseID AND tbl_series.CourseID = tbl_series_courses.SeriesCourseID 
      where (EventType = 2) AND (userId = t.UserId) 

     ) 
     WHERE (c.userId = t.UserId); 

     /* ---- select all */ 
     SELECT * FROM tbl_Temp 

     ORDER BY EventCount Desc,TotalTime; 

END 

tbl_seriesは、その総時間などは、しかし、私は彼らのトップ10最速回たいユーザーをうまくいくストアドプロシージャを構築していますが、MySQLが持っていますそれに限る。私は次のコードを実行することはできません。

/* ---- TOTAL TIME */ 
     UPDATE tbl_Temp AS c,tbl_series AS t 
     SET c.TotalTime = (
      SELECT SUM(A.Time) FROM (
        SELECT Time FROM tbl_series 
        WHERE (UserID = t.userId) 
        LIMIT 10 
       ) AS A 
     ) 
     WHERE c.UserID = t.userId; 

私は戻って

手順の実行が

1054失敗したエラーを取得します - 不明な列 't.userId' 'WHERE句'

任意のアイデアは素晴らしいことですで、ありがとう。

答えて

0

Ahhh ...シンプルなMySqlは、内部クエリでLIMITをサポートしていません。
カーソルを開いてメイン結果セットをループし、ループ内の各レコードの必要なデータをフェッチします。