[英]UPDATE multiple rows to Value from another table (FK)
我已将一个Excel文档导入MySQL以整理和更好地使用数据,但是在运行更新时遇到问题。
所有表都用作下面的示例;
表资产_注册电话SIM卡团队
asset_register包含以下列;
id INT,
serialNo VARCHAR,
simNo INT,
team VARCHAR
问题是我想创建一个团队表,并在asset_register表中引用teamId。
那有意义吗? 而不是存储实际的团队名称,我想要一个对Teams表的外键。
问题在于更新从excel导入的asset_register表中的所有数据。 团队的数量几乎与用户相同(〜500个),我需要编写查询或存储过程来更新所有团队。
我认为存储过程将是解决之道。 到目前为止,我有以下内容,但它将team的值更新为'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 ;
任何帮助将不胜感激,也许有更好的方法可以做到这一点,朝着正确的方向轻推将是巨大的。
如果我很好地理解了您的问题,建议您使用本文的mysql手册中所述的mutli表更新语法: MutliTableUpdate 。 您尝试通过ID更改字符串键,请注意数据类型/转换。
这个想法应该是:
UPDATE asset_register, crews
SET asset_register.crewID = crews.id
WHERE crews.crewName = asset_register.crewID
但是,如果使用其他列的列进行检查并检查中间结果,可能会更安全。
在第一个示例中:
id INT,
serialNo VARCHAR,
simNo INT,
team VARCHAR
您可以添加一个teamID列,进行更新并重命名您的列
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.