MST

星途 面试题库

面试题:MySQL中如何实现合并两个结构相同的表

假设有两个表table1和table2,它们的结构完全相同,都包含id、name、age字段。请写出SQL语句,将table2的数据合并到table1中,且不重复插入已有的数据。
26.1万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

在MySQL中,可以使用 INSERT INTO...SELECT...ON DUPLICATE KEY UPDATE 语句来实现这一需求。假设 id 是唯一键(或主键),示例代码如下:

INSERT INTO table1 (id, name, age)
SELECT id, name, age
FROM table2
ON DUPLICATE KEY UPDATE
  table1.name = VALUES(name),
  table1.age = VALUES(age);

上述代码表示将 table2 中的数据插入到 table1 中。如果 table1 中已经存在相同 id 的记录,则使用 table2 中的 nameage 更新 table1 中的对应记录。

如果数据库是Oracle,可以使用 MERGE INTO 语句,示例如下:

MERGE INTO table1 t1
USING table2 t2
ON (t1.id = t2.id)
WHEN MATCHED THEN
  UPDATE SET t1.name = t2.name, t1.age = t2.age
WHEN NOT MATCHED THEN
  INSERT (id, name, age) VALUES (t2.id, t2.name, t2.age);

这段SQL语句实现了将 table2 中的数据合并到 table1 中,如果 table1 中存在相同 id 的记录则更新,不存在则插入。

在SQL Server中,可以使用 MERGE 语句,示例如下:

MERGE INTO table1 AS target
USING table2 AS source
ON target.id = source.id
WHEN MATCHED THEN
  UPDATE SET target.name = source.name, target.age = source.age
WHEN NOT MATCHED THEN
  INSERT (id, name, age) VALUES (source.id, source.name, source.age);

MERGE 语句同样完成了将 table2 数据合并到 table1 的功能,存在匹配记录时更新,不存在时插入。