[英]MySql. How to combine several columns in cursor?
我將非常感謝任何幫助。 我的情況..我有一張學生桌(我只寫了這個問題的主要欄目):
| Id | Lastname | Firstname |
_____________________________
| 1 | Smith | John |
| 2 | Williams | Robert |
| 3 | Wilson | David |
...
一張有作品的桌子:
| Id | Name |
_________________
| 1 | Work1 |
| 2 | Work2 |
...
寫下誰做了這項工作的表格(可以做同樣工作的學生人數可以是任意的)
| Id | WorkId | StudentId |
___________________________
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 2 | 2 |
| 5 | 2 | 3 |
...
我需要在過程中制作一個表格(使用光標),如下所示:
| WorkName | Students |
_____________________________________________________
| Work1 | (Smith J., Williams R.) |
| Work2 | (Smith J., Williams R., Wilson D.) |
...
在這種情況下,我不完全了解如何使用光標。 我的代碼:
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 ;
我解決了我的問題。 對於這個決定,我創建一個新表,如果學生現在不在此表中,則在此表中插入新行,如果學生在表中,則更新此表(設置新學生和逗號)。 我通過游標做到了這一點。 這是最后正確的決定。 現在一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.