2016-05-31 103 views
0

我有两个数据库表。两个表具有相同的结构。现在我想从旧表中插入数据到新表,如果数据已经存在,它将更新旧数据,否则插入新数据。我想通过匹配一些列字段值来插入或更新数据。任何帮助?从旧表插入数据到新表

+0

你已经尝试了什么?你在用什么数据库?你的DB的模式是什么? – Lee

回答

0

您可以利用MySQL的ON DUPLICATE KEY UPDATE功能。从MySQL doc -

如果指定了对重复密钥更新,和行插入该 会引起一个唯一索引或主键的重复值时,MySQL 执行旧行的更新。

因此,如果您在表中定义了按键,则可以使用此功能。例如,您的发言看起来就像 -

insert into target_table (col1, col2, ...) 
select col1, col2,... from source_table 
on duplicate key update 
    col1 = values(col1), 
    col2 = values(col2), 
+0

Bro是“ON DUPLICATE KEY UPDATE”只检查唯一索引或主键?我还匹配一些列值(如id,fname,lname,email等) –

+0

您必须在这些列上创建至少一个UNIQUE索引,这些列使您的记录唯一 – hashbrown

+0

我的表只有主键(id)独特的索引和表格有一千个数据 –

0

最好的方法是你可以使用左外连接concept.That会很容易。

INSERT INTO table1 
    (col_1, col_2, col_3, col_4, col_5) values("","","","") 
SELECT 
    table2_col_1, 
    table2_col_2, 
    table2_col_3, 
    table2_col_4, 
    1 
FROM 
    table_2 AS t2 
LEFT OUTER JOIN 
    table1 AS t1 
ON 
    t1.col_1 = t2.table2_col_1; 

UPDATE table_2 
SET table2_col_1 = 'value'// here is the value that you need to implement 
WHERE t1.col_1=t2.table2_col_1;//here is your condition 
0

从你的问题,我明白你的table2并不那么重要。 因此,您可以删除整个表格2中存在的值,以便结构不会受到影响。完成后,您可以导出插入查询以实现表格1中存在的值。

+0

兄弟我在旧表中有大约500个数据,在新表中有数千个(旧的加上一些新的)数据,但是遗漏了旧表中的一些数据。现在我想添加从旧桌子 –