MYSQL,将选定字段从一个表复制到另一个表

45
在MySQL中,如何将一个包含所有记录的字段从TABLE1复制到对应主键(例如雇员编号)的TABLE2

表格中有哪些字段?你到目前为止尝试了什么? - Chetter Hummin
你是在尝试执行SELECT INTO语句吗? - Ryan
8个回答

98
如果你的意思是想要使用另一个表的列来更新一个表的列,那么这里有一些选项:
  1. 使用 JOIN:
  2. UPDATE table1 AS t1
      INNER JOIN table2 AS t2 ON t1.EmpoyeeNo = t2.EmployeeNo
    SET t1.SomeColumn = t2.SomeColumn
    

    或者它可以是一个左连接:

    UPDATE table1 AS t1
      LEFT JOIN table2 AS t2 ON t1.EmpoyeeNo = t2.EmployeeNo
    SET t1.SomeColumn = t2.SomeColumn
    
  3. 这将实质上清空(设为NULL)那些没有匹配的值。

  4. 一个子查询:

    UPDATE table1
    SET SomeColumn = (
      SELECT SomeColumn
      FROM table2
      WHERE EmployeeNo = table1.EmployeeNo
    )
    

    这与#1中的左连接解决方案等效。

    请注意,在所有情况下,假定table1中的一行最多只能匹配table2中的一行。


57

试一试

INSERT INTO `table2` (`field_name2`) SELECT `field_name` FROM `table1`

2
这将把table1中的所有数据插入到table2中。 - Fahim Parkar
22
鉴于这是被接受的答案,我会假设提问者发布了错误的问题。 - swasheck
在运行此查询之前,请确保您完全理解其功能(它将插入新记录 - 而不是“更新”与主键对应的现有记录,这正是 OP 所询问的)。如果您不确定是否理解,请在运行之前备份数据。 - butlerblog
这是错误的答案。它应该被删除。 - Andrew

30

将数据从一个表复制到另一个表的查询语句是:

INSERT INTO `table2` (`field1`, `field2`)
    SELECT `field1`, `field2` FROM `table1`

如果您只想复制所选值,请在查询中使用where子句。

INSERT INTO `table2` (`field1`, `field2`)
    SELECT `field1`, `field2` FROM `table1`
    WHERE `field1` = condition

6
update
  table1 t1
  join table2 t2 on t2.field = t1.field
set
  t1.field1 = t2.matchingfield
where
  t1.whatever = t2.whatever

这个方程中的t1和t2是什么意思? - Eoin
1
@Eoin 它们被称为“表别名”,用于简化表的名称,以便您可以少打一些字。您还可以添加“AS” => “UPDATE table1 AS t1 ...”。 - Pathros
不错!此外,它可以在没有where t1.whatever = t2.whatever过滤器的情况下正常工作。 - Pathros

4
您可以使用此方法将具有特定条件的table1中的所有记录复制到table2中。
Insert into table2  select  * from table1 where field1=condition

请注意table1中的_order_列必须与table2中的_order_列完全匹配。 - bishop

2
假设表结构如下。
TableA - Col1,Col2,Col3 TableB - Col1,Col2,Col3
在将数据从一个表转移到另一个具有相同数据库的表时,无需选择表的所有列。您可以将行从TableA复制(插入)到TableB。
代码如下 -
Insert into TableB (Col1, Col2 ,Col3)
Select Col1, Col2 ,Col3 from TableA

你也可以这样做 -
Insert into TableB (Col1, Col2, Col3) 
Select * from TableA

两种代码都可以工作,您需要看到您的要求。
通用代码 -
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;

如果需要,您可以添加“Where”条件。

谢谢!!!


-1

table_1 插入数据(column-1, column-2),从 table_2 中选取列 column-1 和 column-2;


1
这个问题已经得到了很多答案。请比较你的答案和其他答案,看看你的答案是否提供了任何新的东西。如果是,请解释一下为什么,因为对我来说并不明显。 - Neuron
@K. Salabir欢迎加入社区,感谢您提供答案。 - Eoin

-2

将交付日期、应用程序ID、下载大小和上传大小插入到交付表中,从交付摘要中选择Delivered、Appid、DownloadSize和UploadSize。


仅编写代码的答案不是高质量的。更好的答案应该解释代码的作用以及它如何解决问题。 - Stephen Ostermiller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接