这就是我所拥有的:
1 MySQL db with 2 schemas
- schema 1
- schema 2
他们都有一个名为文件的表,
with 3 fields
- Name
- Play
- Date
两个模式都有名称filed populated
和schema 1 has Play and Date populated
..
我想导入所有记录或播放和日期中的架构2,其中名称与架构1相同。
so
Schema 1
- Name = A
- Play = 1
- Date = 25/06/17
Schema 2
- Name = A
- Play =
- Date =
我想插入schema 2的播放和日期,其中两个数据库中的名称匹配。
我有这个查询 -
INSERT INTO schema2.test (Play, Date)
SELECT Play, Date FROM schema1.test;
我无法算出Where子句。
似乎您想从另一个表中更新一个表:
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
在两个表中是唯一的 - 标识每一行。如果这不是真的,我建议一种非常不同的方法。将名称存储在单独的表中,然后截断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
实际上,如果您的桌子很大,这种方法通常可能具有更好的性能。
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
只需尝试以上代码即可。希望这对您有帮助。
您可以使用更新
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
和一个插入选择
insert into database2.files ( Name, Play, Date)
select Name, Play, Date
from database1.files
inner join database2.files
where database1.name <> database2.name