-1

我需要标准化我的桌子。所以我制作了一个我执行的脚本(sql)。我想将表 A(旧)中的所有现有客户插入表 B(新)中。

它只是用

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

但我想设置一些外键值。table 中有一个city字段,A但table 中有一个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')

我什么时候搞砸了?

4

1 回答 1

0

只需使用语法 SELECT id AS 'city_id' FROM B ,您可以“命名”选择中的每一列,然后您可以毫无问题地插入它。

您可以像这样停用外键约束:

SET foreign_key_checks = 0;

并将其切换回

SET foreign_key_checks = 1;

完成查询后。这不是最佳实践,但有时会有所帮助。

于 2013-04-22T23:02:14.993 回答