这就是我所拥有的:
1 MySQL db with 2 schemas
- schema 1
- schema 2
他们都有一个名为files的表,
with 3 fields
- Name
- Play
- Date
这两个架构的名称都为filed populated
,schema 1 has Play and Date populated
..
我想将所有记录或Play和Date导入到架构2中,其中Name与架构1相同。
所以
Schema 1
- Name = A
- Play = 1
- Date = 25/06/17
Schema 2
- Name = A
- Play =
- Date =
我想将Play和Date插入到架构2中,其中Name在两个数据库中匹配..
我有这个查询 -
INSERT INTO schema2.test (Play, Date)
SELECT Play, Date FROM schema1.test;
我无法解决where子句。
答案 0 :(得分: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
试试上面的代码。 希望这会对你有所帮助。
答案 1 :(得分: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
在两个表中是唯一的 - 标识每一行。如果不是这样,我建议采用一种截然不同的方法。将名称存储在单独的表中,然后截断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
实际上,如果你的表很大,这种方法通常可能会有更好的表现。
答案 2 :(得分: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
和插入选择
insert into database2.files ( Name, Play, Date)
select Name, Play, Date
from database1.files
inner join database2.files
where database1.name <> database2.name