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

您将获得一个结果集,每个学生每次考试一行。

如果要为两个不同的考试设置两个单独的列,则必须对结果集执行所谓的 操作。像这样。

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 颈部众所周知的疼痛。