안녕하세요. 광저우 (스위스는 여기에 주 (州)가 없다는 스위스)에 대한 MySQL 테이블이 있습니다. 내 테이블에 모든 캔톤을로드했습니다 데이터는 스위스 우편 서비스에서 infile). 이제 도시 표를 채우고 싶습니다 (스위스 우편 서비스에서 다시 로컬 데이터 infile). 문제는 광저우에서 FK를 가져와야한다는 것입니다.파일에 데이터로드 및 기존 테이블에서 외래 키 얻기
도시 파일에는 canton 이니셜 (예 : "VS")이 있으며 캔톤에서는 PK, 이름, 이니셜 (예 : 1, "월리스", "VS")으로 저장됩니다.
새 테이블을 채우려면 해당 정보로 광저우에서 FK를 가져와야합니다. 나는 도시 표에 이니셜 열이 있기를 원하지 않는다.
테이블 : 나는 tryed했습니다
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;
처음에는 약간 다른 경로로 업데이트를 시도했지만 작동하지 않았습니다. 내가 실수 한 것 같습니다. 임시 테이블로 작업 중입니다. – TheCell