从另一个表(FK)更新多行到Value

时间:2011-09-23 13:41:13

标签: mysql sql stored-procedures sql-update

我已将一个excel文档导入MySQL以整理并更好地使用数据但我在运行更新时遇到问题。

所有表格如下所示;

表 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 ;

任何帮助将不胜感激,可能有更好的方法来做到这一点,并在正确的方向推动将是伟大的。

1 个答案:

答案 0 :(得分:2)

如果我很好理解你的问题,我建议你在本文的mysql手册中使用mutli table update语法描述: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列,执行更新并重命名列