1

構造の異なる 2 つのデータベースがあります。

表1:

ch_code    ch_def    ch_weight

表 2:

address    ch_code

この 2 つのテーブルをマージする必要があるため、構造は次のようになります。

ch_code    ch_def    ch_weight    address

2 つのテーブルの行数が異なります (テーブル 1 の方がデータが多い)。

mergeunion..何か他のものを使用する必要がありますか?

ありがとうございました!

4

2 に答える 2

1

考えられる3つのケースを処理するソリューションを次に示します。

  1. t2 にない t1 に ch_code 値があります
  2. t1 にない t2 に ch_code 値があります
  3. t1 と t2 の両方に ch_code 値があります

SELECT t1.ch_code, t1.ch_def, t1.ch_weight, '' as address from t1 where not exists (select * from t2 where t2.ch_code = t1.ch_code)

UNION

SELECT t2.ch_code, '' as ch_def, '' as ch_weight, t2.address from t2 where not exists (select * from t1 where t1.ch_code = t2.ch_code)

UNION

SELECT t1.ch_code, t1.ch_def, t1.ch_weight, t2.ch.address from t1 left join t2 on t1.ch_code = t2.ch_code

その結果セットを取得したら、マージされたデータを格納するための新しいテーブルがある場合は、INSERT INTO を実行できます。

于 2009-11-25T20:16:26.380 に答える
1

Table2 に Table1 に含まれるデータしかない場合 (つまり、Table1 にないデータが Table2 にない場合)、次のようなことができるはずです (Table3 が既にセットアップされていると仮定します)。

INSERT INTO TABLE3 (ch_code, ch_def, ch_weight, address)
SELECT Table1.ch_code, Table1.ch_def, Table1.ch_weight, Table2.address
FROM Table1 LEFT JOIN Table2 on Table1.ch_code = Table2.ch_code

(MySQL のインストールが手元にないため、特定の構文はさまざまです。)

Table2 に Table1 のデータと一致しないデータがある (そしてそのデータを保持したい) 場合は、FULL JOIN が必要になります (MySQL がそれをサポートしていない場合は、LEFT JOIN と RIGHT JOIN を UNION します)。

于 2009-11-25T20:02:22.780 に答える