繁体   English   中英

将多行更新为来自另一个表(FK)的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM