こんにちは、カントン用の Mysql テーブルがあります (スイスにはカントンの州はありません)。テーブルにすべてのカントンをロードしました (スイスの郵便局からのローカル データ ファイル)。ここで、都市テーブルに入力したいと思います (再び、スイスの郵便サービスからのローカル データ ファイル)。問題は、カントンから FK を取得する必要があることです。
都市ファイルにはカントンのイニシャル (例: "VS")があり、カントンでは PK、名前、イニシャル (例: 1、"Wallis"、"VS") として保存されます。
新しいテーブルに入力したい場合は、カントンからその情報を含む FK を取得する必要があります。都市テーブルにイニシャル行が必要ありません。
テーブル:
CREATE TABLE tbl_canton (
PK_canton INT NOT NULL AUTO_INCREMENT,
canton_name VARCHAR(45) NOT NULL,
canton_initiales VARCHAR(2) NOT NULL,
PRIMARY KEY (PK_canton)
);
CREATE TABLE tbl_city (
PK_city INT NOT NULL AUTO_INCREMENT,
city_name VARCHAR(45) NOT NULL,
city_zipcode INT NOT NULL,
FK_canton INT NOT NULL,
PRIMARY KEY (PK_city),
FOREIGN KEY (FK_canton) REFERENCES db_eventengine.tbl_canton (PK_canton)
);
私は試しました:
LOAD DATA LOCAL INFILE 'c:/temp/tbl_city.csv' INTO TABLE tbl_city FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
(PK_city, city_name, city_zipcode, @cantoninit)
SET FK_canton = (SELECT PK_canton FROM tbl_canton WHERE @cantoninit = canton_initiales);
ただし、最初に @cantoninit を入力し、すべてがロードされた後に FK の設定を開始します。MySqlにすべての行の後にそれを行うように指示できますか、または後でそれを処理するにはどうすればよいですか?
回答/解決済み:
更新を指摘してくれたデニスに感謝します。私は今、一時テーブルでそれを行います:
DROP TABLE IF EXISTS tbl_temp;
CREATE TABLE tbl_temp (
temp_PK_city INT NOT NULL AUTO_INCREMENT,
temp_city_name VARCHAR(45) NOT NULL,
temp_city_zipcode INT NOT NULL,
temp_FK_canton VARCHAR(2),
PRIMARY KEY (temp_PK_city)
);
DELETE FROM tbl_temp;
LOAD DATA LOCAL INFILE 'c:/temp/tbl_city.csv' INTO TABLE tbl_temp FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
(temp_PK_city, temp_city_name, temp_city_zipcode, temp_FK_canton);
INSERT INTO tbl_city (city_name, city_zipcode, FK_canton)
SELECT temp_city_name, temp_city_zipcode, tbl_canton.PK_canton
FROM tbl_temp, tbl_canton
WHERE temp_FK_canton = tbl_canton.canton_initiales;
DROP TABLE tbl_temp;