Как объединить 2 таблицы в MySQL? - PullRequest
0 голосов
/ 20 ноября 2011

Я хотел бы объединить 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 ]

3 голосов
/ 20 ноября 2011

Простым решением было бы поместить временный УНИКАЛЬНЫЙ индекс в Name в 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
3 голосов
/ 20 ноября 2011

Вам необходимо установить уникальный ключ, если для вас важна уникальность в этих полях.

Тогда вы можете сделать INSERT ... SELECT без проблем, и у вас не возникнет проблем с этим вбудущее.

1 голос
/ 20 ноября 2011

Следующий запрос должен нормально работать.

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
...