我需要规范我的桌子。所以我制作了一个我执行的脚本(sql)。 我想将表A(旧)中的所有现有客户端插入到表B(新)中。
只需用
完成INSERT INTO `A` SELECT * FROM `B`;
但我想设置一些外键值。表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')
在哪一点上我搞砸了什么?
答案 0 :(得分:0)
只需使用语法SELECT id AS'nity_id' FROM B,您可以“命名”您选择中的每一列,然后您可以插入它而不会出现任何问题。
您可以停用外键约束,如下所示:
SET foreign_key_checks = 0;
并将其切换回
SET foreign_key_checks = 1;
完成查询后。这不是最好的做法,但有时可以提供帮助。