0

MySQL で 1 つのテーブルにマージする必要がある 2 つの異なる Excel ファイルがあります。両方のファイルを CSV でエクスポートし、MySQL の 2 つの異なるテーブルにインポートしました。

最初のテーブル (中央) には次のものがあります。

id, name, surname, address, zip, filedA, fieldB, fieldC, fieldD

2 番目のテーブル (雑誌) には次のものが含まれます。

id (「中央」のものとは異なります)、名前、姓、住所、郵便番号、fieldX、fieldY、fieldZ

目標は、次のテーブルを持つことです。

ID、名前、姓、住所、zip、fieldA、fieldB、fieldC、fieldD、fieldX、fieldY、fieldZ

主な問題は、テーブル " Central" にいくつかの行 (1000) があり、それらがマスターであることです。テーブル「マガジン」には別の行セット(1000も)がありますが、「セントラル」に存在するものと存在しないものがあります。

私がやりたいことは、別のテーブルを作成または作成するか、「中央」テーブルを「」Magazineテーブルで更新し、両方のテーブルに存在する行を更新し、「マガジン」に存在する行に新しい行を挿入できるループです。 1。

PK は同じではありませんが、両方のテーブルの行と一致するには名前と姓のペアで十分であると想定できます。

ありがとう

4

2 に答える 2

0
create table new_table as select * from (   
 SELECT a.id, a.name, a.surname, a.address, a.zip, a.filedA, a.fieldB, a.fieldC, a.fieldD, b.fieldX, b.fieldY, b.fieldZ FROM Central a
    LEFT JOIN Magazine b ON (a.name = b.name and a.surname = b.surname)
    UNION
    SELECT b.id, b.name, b.surname, b.address, b.zip, a.filedA, a.fieldB, a.fieldC, a.fieldD, b.fieldX, b.fieldY, b.fieldZ FROM Central a
    RIGHT JOIN Magazine b ON (a.name = b.name and a.surname = b.surname) ) temp
于 2013-06-11T05:58:31.887 に答える
0

新しいテーブルでname, surname、一意のキーとして定義して、ON DUPLICATE KEY一致を検出するために使用できるようにします。

CREATE TABLE newtable ( /* field definitions */,
  UNIQUE INDEX (name, surname) );

Central次に、最初からデータをロードします。

INSERT INTO newtable (id, name, surname, address, zip, fieldA, fieldB, fieldC, fieldD)
SELECT id, name, surname, address, zip, fieldA, fieldB, fieldC, fieldD
FROM Central;

からのデータを結合し、Magazine一致する行を新しいフィールドで更新します。

INSERT INTO newtable (id, name, surname, address, zip, fieldX, fieldY, fieldZ)
SELECT id, name, surname, address, zip, fieldX, fieldY, fieldZ
FROM Magazine
ON DUPLICATE KEY UPDATE id = VALUES(id), address = VALUES(address),
                        zip = VALUES(zip), fieldX = VALUES(fieldX),
                        fieldY = VALUES(fieldY), fieldZ = VALUES(fieldZ);

おそらくすべてを 1 つの方法で行う方法がありINSERTますが、MySQL にはCROSS JOINそれがないため、コードを作成するのは PITA になります。

于 2013-06-11T05:47:27.850 に答える