mysql - 为什么我的嵌套光标显示两倍的结果?
问题描述
我正在使用嵌套游标来检索许多不同人的最后一小时工作。为此,我首先在第一个游标中获取每个人的 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;
块2:
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
谢谢你的帮助
解决方案
对于一个相当简单的数据库任务,代码确实看起来很复杂。根据您的代码的假设,有两个表(临时和司机)与“temp.logon = chauffeur.matricule_chauffeur”连接。现在您想要获取 Max(hour)(即 max(temp.heure))和 Person 的 ID(即 id_chauffeur)的不同记录。我相信上述任务可以通过一个相当简单的查询来完成,如下所示。
SELECT DISTINCT(max(temp.heure)) as heure, temp.id_chauffeur
FROM temp INNER JOIN chauffeur ON temp.logon = chauffeur.matricule_chauffeur
ORDER BY temp.heure;
(注意:我刚刚用空运行编译了查询,因为我没有表结构。希望它对你有用......干杯!)
推荐阅读
- r - 存储在反应性语句中计算的变量以供在 hist() 中使用
- java - 在 IntelliJ IDEA CTRL+SHIFT+F9 中导致:无法打包文件 IO 错误:java.io.IOException: Negative seek offset
- react-native - 如何在 i18next 中使用 postProcess?
- java - 如何使用 Aspose 和 java 替换 ppt/word 模板数据
- python - 如何忽略False,所以不算为0
- java - 任何对象的自定义 JSON 序列化包装器
- html - 如何在灰色背景色的 div 上显示部分产品图像?
- html - 隐藏垂直滚动条,同时保持可滚动
- python - 为什么使用 ThreadPoolExecutor 时并发不起作用?
- javascript - req.body 在 express 中为空