如何在MySQL中合并2个表?

时间:2011-11-20 16:31:48

标签: mysql sql replace insert

我想合并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 IGNORE INTO和REPLACE INTO命令,但它会复制现有的行,如下所示:

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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:3)

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

然后您可以毫无问题地执行INSERT ... SELECT,并且您将来不会遇到此问题。

答案 1 :(得分:3)

一个简单的解决方案是在table_1上的Name上放置一个临时的UNIQUE索引:

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.

然后删除UNIQUE索引:

DROP INDEX unique_name ON table_1

答案 2 :(得分:1)

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

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