面试题答案
一键面试在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
中的 name
和 age
更新 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
的功能,存在匹配记录时更新,不存在时插入。