Нормализация таблиц MySQL с помощью простой ошибки SQL

Мне нужно нормализовать мой стол. Так что я сделал скрипт (sql), который я выполняю. Я хотел бы вставить всех существующих клиентов из таблицы A (старые) в таблицу B (новые).

Это просто сделано с

INSERT INTO `A` SELECT * FROM `B`;

но я хочу установить некоторые значения внешнего ключа. E сть city поле в таблице A но city_idполе в таблице B, Я думал о чем-то вроде этого:

INSERT INTO `A` (`id`, `name`, `city_id`)
SELECT `id`, `name` FROM `B`,
(SELECT `cities`.`id` FROM `cities` WHERE `cities`.`name` = (SELECT `city` FROM `A` WHERE `A`.`id` = `B`.`id`)) `temp_cities`;

К сожалению, это не работает, потому что B,id не установлено:-(Ошибка следующая:

Error (1054): Unknown column 'B.id' in 'where clause')

В какой момент я что-то напутал?

1 ответ

Просто используйте синтаксис SELECT id AS 'city_id' FROM B, вы можете 'назвать' каждый столбец в вашем выборе, а затем вы можете вставить его без каких-либо проблем.

Вы можете отключить ограничение внешних ключей следующим образом:

SET foreign_key_checks = 0;

и переключите его обратно на

SET foreign_key_checks = 1;

после того как вы закончите запрос. Это не лучшая практика, но иногда это может помочь.

Другие вопросы по тегам