我将非常感谢任何帮助。我的情况.. 我和学生有一个 table (我只写这个问题的主要专栏):
| Id | Lastname | Firstname |
_____________________________
| 1 | Smith | John |
| 2 | Williams | Robert |
| 3 | Wilson | David |
...
一个 table 的作品:
| Id | Name |
_________________
| 1 | Work1 |
| 2 | Work2 |
...
一个 table 写谁做了这项工作(可以做同样工作的学生人数可以是任意的)
| Id | WorkId | StudentId |
___________________________
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 2 | 2 |
| 5 | 2 | 3 |
...
我需要在过程中创建一个 table(使用 cursor),如下所示:
| WorkName | Students |
_____________________________________________________
| Work1 | (Smith J., Williams R.) |
| Work2 | (Smith J., Williams R., Wilson D.) |
...
在这种情况下,我不完全理解如何使用 cursor 。我的代码:
DELIMITER //
CREATE PROCEDURE Report()
BEGIN
DECLARE students VARCHAR(200);
DECLARE id_s INT;
DECLARE done INT DEFAULT FALSE;
DECLARE get_cur CURSOR FOR
SELECT Id, CONCAT(Lastname, ' ', LEFT(Firstname,1), '. ') FROM students;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open get_cur;
read_loop: LOOP
FETCH get_cur INTO id_s, students;
IF done THEN
LEAVE read_loop;
END IF;
SELECT w.Name, students
FROM Work w
JOIN WorkStudent ws ON w.Id=ws.WorkId
JOIN Students s ON s.Id = ws.StudentId
WHERE s.Id=id_s;
END LOOP;
CLOSE get_cur;
END //
DELIMITER ;
回答1
我解决了我的问题。对于这个决定,我创建一个新的 table,如果学生现在还没有在这个 table 中,我在这个 table 中插入新行,如果学生现在在这个 table 中,则更新这个 table(设置新学生和逗号)存在于 table 中。我通过 cursors 做到了这一点。这是最后正确的决定。现在一切正常。