簡體   English   中英

mysql。 如何組合光標中的幾列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM