2017-06-25 7 views
0

に1 DBからの移行:MySQLのこれは私が持っているものである別の

1 MySQL db with 2 schemas 

- schema 1 
- schema 2 

彼らの両方が

..両方のスキーマに名前 filed populatedを持っている、と schema 1 has Play and Date populated

with 3 fields 

- Name 
- Play 
- Date 

、ファイルをテーブルと呼ばれています

名前とスキーマ1が同じスキーマ2にすべてのレコードまたは再生と日付をインポートしたいと考えています。

名前が2つのデータベースに一致するスキーマ2に挿入

ので

Schema 1 

- Name = A 
- Play = 1 
- Date = 25/06/17 

Schema 2 

- Name = A 
- Play = 
- Date = 
私がプレイしたい

と日...

私はこのクエリを持っている -

INSERT INTO schema2.test (Play, Date) 
SELECT Play, Date FROM schema1.test; 

私はうまくできませんwhere句

答えて

0

あなたが一方から他方のテーブル更新するように思える:パフォーマンスのために

update schema2.files f2 join 
     schema1.files f1 
     on f2.name = f1.name 
    set f2.play = f1.play, 
     f2.date = f1.date; 

を、あなたはschema1.files(name)にインデックスをお勧めします。 。 。またはより良いまだ、schema1.files(name, play, date)

これは、nameが2つのテーブルで一意であることを前提としています。これが真実でない場合、私は非常に異なるアプローチを提案します。 schema2.filesを切り捨てし、新しいレコードを挿入し、別のテーブルに名前を格納:

create table schema2.temp_names as 
    select distinct name 
    from schema2.files; 

truncate table schema2.files; 

insert into schema2.files(name, play, date) 
    select f1.name, f1.play, f1.date 
    from schema1.files f1 
    where f1.name in (select n.name from schema2.temp_names n); 

drop table schema2.temp_names; -- if you want 

あなたのテーブルが大きい場合、実際には、このアプローチは、一般的により良い性能を持っているかもしれません。

+0

同じ]を選択し、更新

update database2.files t_dest inner join database1.files t_orig on t.dest.name = t_orig.name set t_dest.play = t_orig.play, t_dest.date = t_orig.date 

とインサートを使用することができます。 –

+0

最初のクエリを実行すると、それは動作していますが、「エラーコード:2013.クエリ中にMySQLサーバーへの接続が失われました」というメッセージが表示され続けます。 – Karl

0
UPDATE 
schema2.test T2 
INNER JOIN schema1.test T1 ON T1.Name=T2.Name 
Set T2.Play=T1.Play,T2.Date=T1.Date 

ここでは、名前列にすでにレコードがあるため、スキーマ2にレコードを挿入する必要はありません。

ので、代わりの挿入あなただけのコードの上にしてみてくださいSchema1

の特定のレコードとそのレコードを更新する必要があります。 これがあなたを助けてくれることを願っています。

0

あなたは私一人として

insert into database2.files (Name, Play, Date) 
select Name, Play, Date 
from database1.files 
inner join database2.files 
where database1.name <> database2.name 
+0

これは受け入れられる回答ではないでしょう。例えば、第2のクエリは、むしろ非センシティブなものである。 –

関連する問題