Загрузите данные в файл и получите внешний ключ из существующей таблицы
Привет там у меня есть таблица Mysql для кантонов (Швейцария у нас нет штатов ее кантон здесь) Я загрузил все кантоны в свою таблицу (локальный файл данных из swiss postalservice). Теперь я хочу заполнить таблицу городов (опять же локальные данные из файла swiss postalservice). Проблема в том, что я должен получить ФК из кантона.
В файле города есть инициалы canton ex: "VS", и в кантоне он сохраняется как PK, имя, инициалы (например: 1, "Wallis", "VS").
Если Я хочу заполнить новую таблицу, которую я должен получить в ФК из Кантона с этой информацией. Мне не нужна строка инициалов в таблице городов.
Таблицы:
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;