Нормализация таблиц 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;
после того как вы закончите запрос. Это не лучшая практика, но иногда это может помочь.