【问题标题】:MySQL: How to insert values from one table into another using with a correlated subquery?MySQL:如何使用相关子查询将一个表中的值插入另一个表?
【发布时间】:2017-03-20 08:58:39
【问题描述】:

我是 MySQL 新手,正在尝试执行以下操作:

我有一个表“链接”,其中包含一个名为“project_id”的新列,以及一个名为“project”的现有列。我还有一个名为“projects”的表,其中包含一个名为“id”的列。

我需要使用'links > project'的值来遍历对应的id 'projects > id',然后插入到'links > project_id'中。一旦完成,我们将不再需要 'links > project',因为 'links > project_id' 将成为外键,然后我们可以简单地在 'projects' 中查找它。

我的伪 sql 代码(我是全新的)看起来像:

INSERT INTO links(project_id)
select id 
from projects
where project = links(project_id)

谢谢(作为新手提前道歉)

【问题讨论】:

  • 您希望新的 project_id 列单独成为一条新记录,还是要在现有记录上填写该列?
  • 新的 links(project_id) 列对于现有行是全新的。 project(id) 中的值需要根据 links(project) 的值填充 links(project_id)。
  • 所以项目ID已经在项目下的链接表中了?不然项目栏的内容是什么?
  • 链接表中新建项目id(int)。在我们不想再使用的链接中有一个项目 (varchar) 列具有项目名称。由于我们现在有一个项目表(带有 id,项目),我们想要读取每一行链接,获取链接(项目),将该值传递给子查询,然后获取项目(项目)的值(项目) = links(project),并将该值插入到 links(project_id)。这样,我们可以杀死 links(project) VARCHAR 并且只有 links(project_id)。

标签: mysql subquery


【解决方案1】:

这是可能的,但假设每个 project.project 值与 links.project 字段完全匹配。

UPDATE links AS l
INNER JOIN (
    SELECT Id, project FROM project
    ) AS a ON a.project = l.project
SET l.project_id = p.Id 

这将使用projects 表中与links.project 中的值匹配的对应id 更新links 表上的project_id 字段。

如果要创建新记录,请使用以下内容

INSERT INTO links (project_id)
SELECT Id FROM project p 
INNER JOIN links l ON l.project = p.project

在这两种情况下,INNER JOIN 将确保只有 project 中已经在 links 中具有等效记录的记录将用于此操作。

【讨论】:

  • 是的,projects.project 列填充了来自 links.project 的不同值。
  • 别担心,希望对您有所帮助。
【解决方案2】:

是的,当然,但请检查语法:

INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;

https://dev.mysql.com/doc/refman/5.7/en/insert-select.html

INSERT with SELECT

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多