MySQL 根据其他表中的ID插入每一行
在MySQL中,我们时常需要根据另一张表中的ID插入每一行数据。本文将提供两种方法实现此功能,一种是使用MySQL JOIN语句,另一种是使用MySQL子查询语句。
阅读更多:MySQL 教程
使用MySQL JOIN语句
Join是MySQL中的一种常用操作,可以将多张表连接在一起查询数据。在使用Join插入数据时,我们需要先创建一张新的表,包含与我们要插入数据的表相同的字段,例如:
CREATE TABLE new_table(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255),
age INT,
PRIMARY KEY (id)
);
然后,我们使用JOIN语句查询需要插入的数据和它们对应的ID,例如:
SELECT t1.id, t2.name, t2.age
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id;
我们将结果保存到一个变量中,例如:
SET @s = CONCAT('INSERT INTO new_table (name, age) VALUES ',
(SELECT GROUP_CONCAT(
DISTINCT CONCAT('(''', name, ''', ', age, ')')
SEPARATOR ',')
FROM (
SELECT t1.id, t2.name, t2.age
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
) AS temp));
请注意,我们在INSERT INTO语句中省略了ID字段,因为它是自动递增的。然后,我们可以执行新的INSERT INTO语句,将结果插入到新的表中:
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
这样,我们就完成了一张表中根据另一张表中的ID插入每一行数据的操作。
使用MySQL子查询语句
另一种实现方法是使用MySQL子查询语句。我们可以编写一个SELECT语句,将目标表中的ID作为输入,并根据这些ID插入新数据到我们想要的表中,例如:
INSERT INTO new_table (name, age)
SELECT t2.name, t2.age
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id;
请记住在INSERT语句中忽略自动增长ID字段。
总结
使用MySQL JOIN语句和MySQL子查询语句,我们可以实现在一张表中根据另一张表中的ID插入每一行数据的操作。虽然使用JOIN语句的效率更高,但是在某些情况下使用子查询语句更加方便。在实际开发中,我们需要根据具体情况选择最合适的方法。