MySQL表通过普通的sql错误规范化

时间:2013-04-22 22:58:10

标签: mysql normalizing

我需要规范我的桌子。所以我制作了一个我执行的脚本(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`;

不幸的是,这不起作用,因为Bid未设置:-(错误如下:

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

在哪一点上我搞砸了什么?

1 个答案:

答案 0 :(得分:0)

只需使用语法SELECT id AS'nity_id' FROM B,您可以“命名”您选择中的每一列,然后您可以插入它而不会出现任何问题。

您可以停用外键约束,如下所示:

SET foreign_key_checks = 0;

并将其切换回

SET foreign_key_checks = 1;
完成查询后

。这不是最好的做法,但有时可以提供帮助。