-1

テーブルを正規化する必要があります。そこで、実行するスクリプト (sql) を作成しました。既存のすべてのクライアントをテーブル A (古い) からテーブル B (新しい) に INSERT したいと考えています。

それは単にで行われます

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

しかし、いくつかの外部キー値を設定したいです。テーブルにはcityフィールドがありますが、テーブルにAcity_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')

どの時点で私は何かを台無しにしましたか?

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 に答える