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句'
任意のアイデアは素晴らしいことですで、ありがとう。