我已經將一個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的定義中。 –