MySQL 使用单独的 SELECT 查询从多个表插入表

标签 mysql sql

我有一个名为 people_temp_1 的表,其中包含:

Name          Age          PersonID
John          25           1
Jane          32           2
Chris         47           3

另一个名为 people_temp_2,其中包含由 table1 中的 PersonID 链接的附加信息:

ID          Profession          Location
1           Web Developer       Texas
2           Graphic Designer    North Carolina
3           Sales               California

我想创建一个名为 people 的新表,用于“合并”两个表中的数据。我现在的做法是:

INSERT INTO people(name, age, profession, location)
SELECT people_temp_1.name AS name,
people_temp_2.age AS age,
(SELECT people_temp_2.profession FROM people_temp_2 WHERE people_temp_2.id = people_temp_1.personId) AS profession,
(SELECT people_temp_2.location FROM people_temp_2 WHERE people_temp_2.id = people_temp_1.personId) AS location
FROM people_temp_1

如您所见,我在插入查询中使用多个选择查询,以便通过 personId 获取相关数据。当我应该能够以某种方式查询 people_temp_2 表一次并使用它的所有列时,执行多个选择查询似乎有点脏,但我不知道如何做到这一点。

是否有更好的方法来构造 insert into 语句?

最佳答案

这是 SQL 的基础知识之一 - 使用 join 。在您的情况下,最好使用outer join,这样您就不会错过 people_temp1 中在 people_temp2 中没有相应记录的人员:

insert into people(name, age, profession, location)
select
    p1.name,
    p1.age
    p2.profession,
    p2.location
from people_temp1 as p1
    left outer join people_temp2 as p2 on p2.id = p1.person_id

关于MySQL 使用单独的 SELECT 查询从多个表插入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18419374/

相关文章:

SQLite COUNT 和 LEFT JOIN - 如何结合?

sql - 显示来自语句 sql 的补充结果

php - 使用 JWPlayer 6 在 PHP 和 MySQL 的 while 循环中执行一次 JavaScript

mysql - 计算引用特定行的行数,MySql 中的多个引用表?

php - 如何在 php mysql 中将搜索选项中的数据分配为 json 格式

mysql - SQL 查询获取发生日期的最大值

sql - 取第一个、第二个、第三个......最后一个值并选择行(带有过滤器和滞后的窗口函数)

sql - 与同一个表 QueryDSL hibernate 的多个连接

php - 在php中的数组内添加新的键,值(值= 1)

mysql - 我如何根据给定的目的地国家/地区订购目的地?