将一列从一个表复制到另一个

问题描述:

我很困惑如何将列从一个表复制到另一个表使用何处。我编写了SQL查询,但它说超出事务锁定时间或查询返回多行。
用mysql
基本上,
我:将一列从一个表复制到另一个

Table 1: Results 
BuildID platform_to_insert 

Table 2: build 
BuildID correct_platform 

update results set results.platform_to_insert 
    = (select correct_platform from 
     build where results.BuildID = build.BuildID) 
+0

你在每张表中有多少行?向我们展示MySQL提供的完整且实际的错误消息 – 2010-01-06 19:23:28

+2

您编写查询的方式的确可以从子查询中返回多行:如果给定的buildID存在多于一个的值,应该采用correct_platform的哪个值? – davek 2010-01-06 19:24:32

+0

我想要做的是:对于结果中的每个BuildID,将其与build中的Build ID进行比较,然后从结构 – JPro 2010-01-06 19:32:36

我不相信你需要一个子查询。

UPDATE results, build 
SET results.platform_to_insert = build.correct_platform 
WHERE results.BuildID = build.BuildID 
+2

多数民众赞成真棒查询解决我的问题非常感谢 – 2012-06-27 14:10:35

+0

哇,真棒的答案。这从根本上改变了我对关系数据库的理解 – Mansiemans 2014-03-20 14:38:45

+0

嗨,我已经试过这个查询,但不能正常工作请检查:更新staff_login_times,staff_rotas SET staff_login_times.scheduled_start = staff_rotas.startdate WHERE staff_login_times.actual_start = staff_rotas.startdate; – HIR 2016-11-30 11:32:46

有两个选项:

  1. 更新你的表使用BuildID作为主键(以避免重复)
  2. 更新您的子查询以仅返回一个结果

    UPDATE results SET results.platform_to_insert = (
        SELECT correct_platform 
        FROM build 
        WHERE results.BuildID=build.BuildID LIMIT 1 
    ); 
    
+0

我想在结果 – JPro 2010-01-06 19:43:05

+0

更新所有行中的问题是,WHERE子句匹配的多个元素子查询。这可以通过将子查询的结果集限制为一个或使* .BuildID成为主键来解决,以避免重复。 无论哪种情况,所有的行都会被更新。 – tmpvar 2010-01-06 20:14:13