2

2 つのテーブルを含む 2 つの MySQL データベースがあります。TABLE_A と TABLE_B と呼びましょう。これらのテーブルは両方とも、フィールドとしてidとを持っていますtitle。両方のデータベースが同じサーバー上にあり、同じユーザーが両方にアクセスできます。

現在、TABLE_A は、titleフィールドに関係するもののための TABLE_B のサブセットです。これは、TABLE_A のすべてtitleが TABLE_B にも存在することを意味します。id2 つのテーブルのフィールドはまったく関連していません。

必要なのは、タイトルに従って、TABLE_A のフィールドをidTABLE_B のフィールドと同期させることです。つまり、 same 、 sameです。明確でない場合は、TABLE_B を保存し、TABLE_Aを上書きする必要があります。そして、TABLE_B から TABLE_A への欠落を追加する必要はありません。idtitleididtitle

TABLE_A と共通のすべての TABLE_B フィールドをコピーしてから、TABLE_A に名前を変更するテンポラル テーブルを使用することを誰かが提案しました。TABLE_A には実際に維持する必要がある他のフィールドもあるため、この方法をたどることはできません。したがって、古い TABLE_A を完全に削除することはできません。

さらに、id両方のテーブルの主キーです。これは、TABLE_B から TABLE_A に単純にコピーできないことを意味します。TABLE_A にid既に存在するが別のtitle.

それを行うための Perl または PHP スクリプトの書き方は知っていますが、純粋な MySQL ソリューションが存在するかどうかを知りたいです。

4

1 に答える 1

3

あなたはこれを行うことができます

CREATE TABLE TableA_TMP AS
SELECT * FROM TableA;

ALTER TABLE TableA_TMP ADD id_new int;

UPDATE TableA_TMP A INNER JOIN TableB B ON lower(A.title) = lower(B.title)
SET id_new = B.id;

RENAME TABLE TableA TO TableA_backup;    

CREATE TableA AS
select id_new as id, title,.... from TableA_TMP;  
于 2012-09-21T19:48:16.123 に答える