【发布时间】:2020-07-24 12:57:43
【问题描述】:
所以我试图将员工的纬度和经度与 covid 收容区的经纬度相匹配。在我的数据库中,我有一个名为“employee”的表,其中包含“Row_index”、“Address”、“Employee_ID”、“Latitude”和“Longitude”列, 以及名为“red_zones”的第二个表,其中包含“Location_index”、“Address”、“Latitude”和“Longitude”列。
现在我必须将“员工”表中每个员工的经纬度与“红色区域”表中所有收容区的经纬度进行匹配。 我决定通过遍历“red_zones”表来使用存储过程:
BEGIN
DECLARE i, locationCount INT DEFAULT 0;
DECLARE lat, lon VARCHAR(45) DEFAULT ' ';
SELECT COUNT(*) INTO locationCount FROM red_zones;
WHILE i <= locationCount DO
SET i = i+1;
SELECT Latitude INTO lat FROM red_zones WHERE Location_index = i;
SELECT Longitude INTO lon FROM red_zones WHERE Location_index = i;
SELECT Employee_ID FROM employee WHERE Latitude = lat AND Longitude = lon;
END WHILE;
END
调用该过程后,我收到错误“已达到最大结果计数,无法显示更多结果”。我想这可能是因为“red_zones”表中的行数超过了 700。
所以我决定改为遍历“员工”表(26 行):
BEGIN
DECLARE i, employeeCount INT DEFAULT 0;
DECLARE lat, lon VARCHAR(45) DEFAULT ' ';
DECLARE flag INT DEFAULT NULL;
SELECT COUNT(*) INTO employeeCount FROM employee;
WHILE i <= employeeCount DO
SET i = i+1;
SELECT Latitude INTO lat FROM employee WHERE Row_index = i;
SELECT Longitude INTO lon FROM employee WHERE Row_index = i;
SELECT Location_index INTO flag FROM red_zones WHERE Latitude = lat AND Longitude = lon;
IF flag != NULL THEN
SELECT Employee_ID FROM employee WHERE Row_index = i;
END IF;
END WHILE;
END
这个过程根本没有给我任何输出。 我还确保两个表之间存在匹配的经纬度。
我应该寻求修改我的程序吗?如果是,以什么方式? 还是我应该寻找一种完全不同的方法来实现我的目标?
谢谢。
【问题讨论】:
-
为什么不是
join?请提供一些具有预期输出的示例数据。 -
我是 mysql 新手,不了解 join 提供的功能!
-
只是出于好奇,为什么我不能通过程序达到相同的结果?由于我只使用过 java,所以我想到的第一个解决方案是遍历所有行。
-
@AarnavShah。 . .您需要在您的组织中找到了解数据库的人员。它们与 Java 等语言完全不同,而且你的大部分直觉不会轻易转移(尤其是关于模块化和过程的任何事情)。您可能还应该找到一些关于 SQL 的教程来学习该语言的基础知识——
JOIN是该语言的基本部分。