2

こんにちは、カントン用の 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;
4

1 に答える 1