2013-05-20 50 views
0

我有两个表。从其他表中更新mysql表

table1的

a - b - c- d - e 
1---b1---c1---d1---e1 
2---b2---c2---d2---e2 
3---b3---c3---d3---e3 
4---b4---c4---d4---e4 
5---b5---c5---d5---e5 

表2

a----b----c----d----e 
1---b2---c2---d2---e2 
3---b3---c3---d3---e3 
5---b5---c5---d5---e5 
6---b6---c6---d6---e6 

在table1的一些信息没有被包括在表2 - 所以我需要更新表2为表2的副本。我试过

UPDATE table1 t1, table2 t2 SET t2.b = t1.b, t2.c = t1.c, t2.d = t1.d 

但0行受到影响 - 没有任何更改。我还能做些什么呢?

回答

3

第一:你需要插入未从表1的表2给出这些记录:

INSERT INTO table2(a, b, c, d, e) 
SELECT t1.* 
FROM table1 AS t1 
LEFT JOIN table2 AS t2 ON t1.a = t2.a 
WHERE t2.a IS NULL; 

然后UPDATE他们匹配表1:

UPDATE table1 t1 
INNER JOIN table2 t2 AS t1.a = t2.a 
SET t2.b = t1.b, 
     t2.c = t1.c, 
     t2.d = t1.d, 
     t2.e = t2.e; 
0

如果表2只包括表1中的“行”,而不是创建另一个表,你可以创建第一个表的视图:

CREATE VIEW view_name AS 
    SELECT column_name(s) 
    FROM table_name 
    WHERE condition