While 使用连接和子查询在 MySQL 到 select 数据中循环
While Loop in MySQL to select data with join and subquery
我是 MYSQL 的初学者,我想使用 while 循环使用 select 语句从 table 获取数据并通过子查询加入另一个 table .
请大家指导我编写代码,下面是我写的代码,但总是出错
DECLARE cn INT DEFAULT 0;
DECLARE tb INT DEFAULT 0;
SET tb = (SELECT COUNT(DISTINCT(exam_id)) FROM mais_writtenworks_detail);
WHILE cn <= tb DO
SELECT ms.`first_name`,ms.`middle_name`, ms.`last_name`, rr.ww_score
FROM mais_students ms
LEFT JOIN
(SELECT mwd.ww_score, mwd.`student_id`
FROM mais_writtenworks_detail mwd
WHERE mwd.`exam_id`= cn
) AS rr ON (ms.`ID`= rr.`student_id`)
SET cn = cn + 1;
END WHILE;
这里是table
我试过这种方法,但是 exam_id 是动态的所以我想使用循环
我需要你们的帮助,
你在想procedurally. But SQL is, unlike most other programming languages, declarative。你描述你想要的东西,服务器给你。
我相信这就是你想要的。您无需使用存储过程来获取此信息。
SELECT ms.ID, ms.`first_name`,ms.`middle_name`, ms.`last_name`,
mwd.exam_id, mwd.ww_score
FROM mais_students ms
LEFT JOIN mais_writtenworks_detail mwd
ON mwd.student_id = ms.ID
ORDER BY ms.ID, mwd.exam_id
您将获得一个结果集,每个学生每次考试一行。
如果要为两个不同的考试设置两个单独的列,则必须对结果集执行所谓的 pivot 操作。像这样。
SELECT ID, first_name, middle_name, last_name,
MAX(IF(exam_id = 1, ww_score, null)) exam_1,
MAX(IF(exam_id = 2, ww_score, null)) exam_2
FROM (
SELECT ms.ID, ms.`first_name`,ms.`middle_name`, ms.`last_name`,
mwd.exam_id, mwd.ww_score
FROM mais_students ms
LEFT JOIN mais_writtenworks_detail mwd
ON mwd.student_id = ms.ID
) detail
GROUP BY ID, first_name, middle_name, last_name
ORDER BY ID
旋转是 SQL 中 xxx 颈部众所周知的疼痛。
我是 MYSQL 的初学者,我想使用 while 循环使用 select 语句从 table 获取数据并通过子查询加入另一个 table .
请大家指导我编写代码,下面是我写的代码,但总是出错
DECLARE cn INT DEFAULT 0;
DECLARE tb INT DEFAULT 0;
SET tb = (SELECT COUNT(DISTINCT(exam_id)) FROM mais_writtenworks_detail);
WHILE cn <= tb DO
SELECT ms.`first_name`,ms.`middle_name`, ms.`last_name`, rr.ww_score
FROM mais_students ms
LEFT JOIN
(SELECT mwd.ww_score, mwd.`student_id`
FROM mais_writtenworks_detail mwd
WHERE mwd.`exam_id`= cn
) AS rr ON (ms.`ID`= rr.`student_id`)
SET cn = cn + 1;
END WHILE;
这里是table
我试过这种方法,但是 exam_id 是动态的所以我想使用循环
我需要你们的帮助,
你在想procedurally. But SQL is, unlike most other programming languages, declarative。你描述你想要的东西,服务器给你。
我相信这就是你想要的。您无需使用存储过程来获取此信息。
SELECT ms.ID, ms.`first_name`,ms.`middle_name`, ms.`last_name`,
mwd.exam_id, mwd.ww_score
FROM mais_students ms
LEFT JOIN mais_writtenworks_detail mwd
ON mwd.student_id = ms.ID
ORDER BY ms.ID, mwd.exam_id
您将获得一个结果集,每个学生每次考试一行。
如果要为两个不同的考试设置两个单独的列,则必须对结果集执行所谓的 pivot 操作。像这样。
SELECT ID, first_name, middle_name, last_name,
MAX(IF(exam_id = 1, ww_score, null)) exam_1,
MAX(IF(exam_id = 2, ww_score, null)) exam_2
FROM (
SELECT ms.ID, ms.`first_name`,ms.`middle_name`, ms.`last_name`,
mwd.exam_id, mwd.ww_score
FROM mais_students ms
LEFT JOIN mais_writtenworks_detail mwd
ON mwd.student_id = ms.ID
) detail
GROUP BY ID, first_name, middle_name, last_name
ORDER BY ID
旋转是 SQL 中 xxx 颈部众所周知的疼痛。