ОБНОВИТЬ несколько строк до значения из другой таблицы (FK) - PullRequest
0 голосов
/ 23 сентября 2011

Я импортировал документ Excel в MySQL, чтобы привести в порядок и лучше использовать данные, но у меня возникли проблемы с запуском обновления.

Все таблицы, используемые в качестве примеров ниже;

Столы asset_register Телефон сим Команда

asset_register содержит следующие поля:

id INT,
serialNo VARCHAR,
simNo INT,
team VARCHAR

Проблема в том, что я хочу создать командную таблицу и ссылку на teamId в таблице asset_register.

Имеет ли это смысл? Вместо того, чтобы сохранять фактическое название команды, я хочу использовать внешний ключ для таблицы команд.

Проблема заключается в обновлении всех данных в таблице asset_register, которые были импортированы из Excel. Команд почти нет среди пользователей (~ 500), и мне нужно написать запрос или хранимую процедуру, чтобы обновить все из них.

Я думал, что хранимая процедура будет способом пойти. Пока у меня есть следующее, но оно обновило значение team до NULL вместо идентификатора команды.

    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 Ответ

3 голосов
/ 23 сентября 2011

Если я хорошо понимаю ваш вопрос, я предлагаю вам использовать синтаксис обновления таблиц mutli, описанный в руководстве по mysql в этой статье: MutliTableUpdate . Вы пытаетесь изменить строковый ключ по идентификатору, следя за типом данных / преобразованием.

Идея должна быть:

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, выполнить обновление и переименовать ваш столбец

...