2011-11-20 83 views
0

我想合并2个MySQL表而不添加相同的行。 我有2个表具有相同的列,但不是相同的行,例如。如何在MySQL中合并2个表?

table_1 
+-------+--------+------+ 
| Name | ResNum | Code | 
+-------+--------+------+ 
| User1 | 25BAM8 | PAR1 | 
| User2 | E26J09 | COP3 | 
+-------+--------+------+ 

table_2 
+-------+--------+------+ 
| Name | ResNum | Code | 
+-------+--------+------+ 
| User1 | 25BAM8 | PAR1 | 
| User3 | 34VNS2 | PAR1 | 
| User4 | EZQVG5 | COP3 | 
+-------+--------+------+ 

合并TABLE_2到TABLE_1时,我想,有这样的:

table_1 
+-------+--------+------+ 
| Name | ResNum | Code | 
+-------+--------+------+ 
| User1 | 25BAM8 | PAR1 | 
| User2 | E26J09 | COP3 | 
| User3 | 34VNS2 | PAR1 | 
| User4 | EZQVG5 | COP3 | 
+-------+--------+------+ 

我已经用INSERT试图忽略INTO和REPLACE INTO命令,但其复制现有的行,像:

table_1 
+-------+--------+------+ 
| Name | ResNum | Code | 
+-------+--------+------+ 
| User1 | 25BAM8 | PAR1 | 
| User1 | 25BAM8 | PAR1 | 
| User2 | E26J09 | COP3 | 
| User3 | 34VNS2 | PAR1 | 
| User4 | EZQVG5 | COP3 | 
+-------+--------+------+ 

任何帮助,将不胜感激。

回答

2

一个简单的解决办法是把一个临时的唯一索引名称上TABLE_1:

CREATE UNIQUE INDEX unique_name ON table_1(Name) 

要传输的实际行,使用SELECT INSERT:

INSERT INTO table_1(Name, ResNum, Code) SELECT Name, ResNum, Code FROM table_2. 

然后放下唯一索引:

DROP INDEX unique_name ON table_1 
2

如果这些字段中的唯一性对您很重要,您需要设置一个UNIQUE键。

然后你可以做一个INSERT ... SELECT没有问题,你将不会遇到这个问题在未来。

+0

谢谢。如果我想将“ResNum”列设置为“UNIQUE键”。我应该怎么做?我应该在创建桌面时执行此操作,还是现在可以执行此操作? – Julien

0

下面的查询应该可以正常工作。

SELECT * FROM TABLE_1 T1,TABLE_2 T2 
WHERE T1.NAME = T2.NAME 
UNION 
SELECT * FROM TABLE_1 T1, TABLE_2 T2 
WHERE T1.NAME != T2.NAME