我已经将一个excel文档导入到MySQL中以整理并更好地使用数据,但是我在运行更新时遇到了问题。从另一个表(FK)更新多个行的值
所有的表格都用作下面的例子;
表 asset_register 电话 SIM 队
的asset_register包含以下的cols;
id INT,
serialNo VARCHAR,
simNo INT,
team VARCHAR
问题是我想创建一个团队表,并在asset_register表中引用teamId。
这有道理吗?而不是存储实际的团队名称,我希望将外键添加到团队表中。
问题在于更新从excel导入的asset_register表中的所有数据。几乎与用户数量相同(〜500),我需要编写查询或存储过程来更新所有这些数据。
我认为一个存储过程将是最好的选择。到目前为止,我拥有以下内容,但它将团队的值更新为'NULL'而不是teamId。
DELIMITER //
DROP PROCEDURE `updateCrews`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `updateCrews`()
BEGIN
DECLARE rowCount INT;
DECLARE crewNameFromRegister VARCHAR(7);
DECLARE currentRow INT;
DECLARE newCrewdata VARCHAR(7);
SET rowCount=(SELECT COUNT(*) FROM asset_register);
SET currentRow = 1;
myUpdateLoop: WHILE (currentRow < rowCount) DO
SET crewNameFromRegister = (SELECT crewID FROM asset_register WHERE id = currentRow);
SET newCrewData = (SELECT id FROM crews WHERE crewName = crewNameFromRegister);
UPDATE asset_register SET crewID = newCrewData;
SET currentRow = currentRow + 1;
END WHILE myUpdateLoop;
END//
DELIMITER ;
任何帮助将不胜感激,有可能是一个更好的方式来做到这一点,在正确的方向轻推将是巨大的。
你不是应该使用'WHERE'条款与'UPDATE'声明?如果你处理的最后一行有一个NULL组,那么它将使用你的注册表中的所有行。 –
SET crewNameFromRegister =(SELECT crewID FROM asset_register WHERE id = currentRow); - 船员ID从哪里来?它不在您提供的asset_register的定义中。 –