如何根据 MySQL 中第三个表中存在的 id 将数据从一个表复制到另一个表?

Posted

技术标签:

【中文标题】如何根据 MySQL 中第三个表中存在的 id 将数据从一个表复制到另一个表?【英文标题】:How to copy data from one table to another based on ids present in third table in MySQL? 【发布时间】:2016-07-01 22:29:05 【问题描述】:

我有三张类似的桌子

表 1

这是一个与 Table2 具有相同列的空白表。

表2

它包含了表1中需要复制的实际数据。

id   cola   colb   colc cold
1     hd     dj    dj    dh
2     hf     uy    ug    se
...

Table3

在将数据从 Table2 复制到 Table1 之前,首先我需要验证 id 是否存在于 Table3 中。换句话说,我只想将 Table2 中的行复制到 Table1 中,其 id 存在于 Table3 中。

id   col1    col2
1     xy      zz
2     ys      sh

还有一个东西Table2 & Table3 包含50万行,所以查询一定是可行的。

【问题讨论】:

你可以看看我三年前问的问题***.com/questions/10351998/… 你有没有尝试过? 这是非常基本的东西。从 mysql 的初学者教程开始。 @Nitish 我已经尝试了以下所有已回答的查询,但这些都需要大量时间和资源。我正在以查询或工具等形式寻找可行的解决方案。 @user2350535:你需要注意你的语言。请拨打tour 并阅读How to Ask 以了解我们对这里问题的期望。请注意,我们不提供从头开始的编码服务。请告诉我们您已经尝试过什么,它是如何失败的,我们或许可以提供帮助。 【参考方案1】:

有人将此作为重复的问题 然而答案是

insert into Table1 
select * from Table2 where Table1.id=Table2.id

【讨论】:

【参考方案2】:

使用子查询的选项 1:

insert into Table1 
select * from Table2 where id in (select id from Table3)

使用 INNER JOIN 的选项 2:

insert into Table1 
select * from Table2 INNER JOIN Table3 USING(id);

【讨论】:

更新了帖子,添加了一种使用 INNER JOIN 的新方法。【参考方案3】:
 insert into Table1 
select * from Table2 where id in (select id from Table3)

如果 table1 和 table2 中的列数相同,则上述查询将起作用

其他

    insert into Table1 (column1,column2,.....)
select column1,column2...  from Table2 where id in (select id from Table3)

【讨论】:

【参考方案4】:

使用连接。它更快。

insert into table1 (id, cola, colb, colc, cold)
select t2.id,t2.cola,t2.colb,t2.colc,t2.cold 
  from table2 t2 
left join 
       table3 t3 
  on t2.id=t3.id
where t3.id is null

【讨论】:

【参考方案5】:

您可以使用EXISTS

查询

insert into Table1(id, cola, colb, colc, cold)
select id, cola, colb, colc, cold
from Table2 t
where exists(
    select * from Table3
    where id = t.id
);

JOIN

insert into id, cola, colb, colc, cold
select t1.id, t1.cola, t1.colb, t1.colc, t1.cold
from Table2 t1
join Table3 t2
on t1.id = t2.id;

【讨论】:

以上是关于如何根据 MySQL 中第三个表中存在的 id 将数据从一个表复制到另一个表?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 根据记录是不是存在于另一个表中选择布尔值

MySQL:从两个表中获取结果,在第三个中计算匹配项

如何将两个表与 SQL Server 中第二个表中引用同一列的两列连接起来

根据查询结果和变量更新表中的记录 - 结果仅返回变量中第一个 int 的记录

如何检查指定的ID在MySQL的两个表中是否不存在?

fopen() 创建权限模式