为什么我的嵌套光标显示两倍的结果?

时间:2019-03-10 20:33:19

标签: mysql nested cursors

我正在使用嵌套游标来检索许多不同人员的最后工作时间。 为此,我首先在第一个游标中获取每个人的ID,然后将ID发送到第二个游标,第二个游标为每个人的ID选择一个最大值(小时)。返回的值是正确的,但是显示的结果是重复的,除非当我单独测试第一个游标时,每个ID仅显示一个结果。 也许答案很容易看出来,但是经过很多尝试来解决这个问题之后,我还是不知道。谢谢你的帮助。 这是我的代码:

第1块:

BEGIN
    DECLARE no_more_rows INT DEFAULT FALSE;
    DECLARE v_idChauffeur VARCHAR(7);

    DECLARE c_idChauffeur CURSOR FOR
        SELECT DISTINCT id_chauffeur FROM temp 
        RIGHT JOIN chauffeur 
        ON temp.logon = chauffeur.matricule_chauffeur
        WHERE logon IN (SELECT matricule_chauffeur from chauffeur)
        order by id_chauffeur;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;

    OPEN c_idChauffeur;
        get_idChauffeur:LOOP
            FETCH c_idChauffeur INTO v_idChauffeur;
            IF no_more_rows THEN CLOSE c_idChauffeur;
            LEAVE get_idChauffeur;
            END IF;

BLOCK2:

BEGIN
DECLARE no_more_rows2 INT DEFAULT FALSE;
DECLARE v_maxHeure VARCHAR(20);

DECLARE c_maxHeure CURSOR FOR
    SELECT DISTINCT(max(heure)) as heure from temp
    right join chauffeur ON temp.logon = chauffeur.matricule_chauffeur
    where id_chauffeur = v_idChauffeur
    order by heure;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows2 = TRUE;

OPEN c_maxHeure;
    get_maxHeure:LOOP
        FETCH c_maxHeure INTO v_maxHeure;
        SELECT v_maxHeure,v_idChauffeur;
        IF no_more_rows2 THEN CLOSE c_maxHeure;
        LEAVE get_maxHeure;
        END IF;
    END LOOP get_maxHeure;
    END BLOCK2;
END LOOP get_idChauffeur;
END BLOCK1

这是一些重复的结果:

v_maxHeure 23:02:17 v_idChauffeur 93
v_maxHeure 23:02:17 v_idChauffeur 93


v_maxHeure 23:24:12 v_idChauffeur 99
v_maxHeure 23:24:12 v_idChauffeur 99

v_maxHeure 15:19:28 v_idChauffeur 100
v_maxHeure 15:19:28 v_idChauffeur 100

感谢您的帮助

0 个答案:

没有答案