我想合并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 |
+-------+--------+------+
任何帮助都将不胜感激。
答案 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