Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:将某些字段值复制到同一表中的另一条记录_Mysql_Sql_Sql Update - Fatal编程技术网

Mysql SQL:将某些字段值复制到同一表中的另一条记录

Mysql SQL:将某些字段值复制到同一表中的另一条记录,mysql,sql,sql-update,Mysql,Sql,Sql Update,我有一个表,其中大约有100条记录作为模板,超过10000条拷贝记录与原始记录反向引用。我需要从副本中相应的原始字段重新初始化副本中的字段,但无法找出为什么无法从子查询中引用外部字段 示例表(): 预期结果: 1 no change 2 no change 3 string should change to 'original 1' 4 string should change to 'original 2' 5 string should change to 'original 2' 我尝试

我有一个表,其中大约有100条记录作为模板,超过10000条拷贝记录与原始记录反向引用。我需要从副本中相应的原始字段重新初始化副本中的字段,但无法找出为什么无法从子查询中引用外部字段

示例表():

预期结果:

1 no change
2 no change
3 string should change to 'original 1'
4 string should change to 'original 2'
5 string should change to 'original 2'
我尝试过的SQL:

update data as target set target.string=(select string from 
(select string from data as source where source.id=target.originalid) as x);
错误:

Unknown column 'target.originalid' in 'where clause'

您收到该错误是因为子查询只能访问其直接父查询的数据。这意味着您的
选择字符串FROM(),因为x
知道
目标。*
,但不知道子查询。但是,您也不能在单个查询中选择和写入同一个表


虽然可能有一种更奇特的方法来做这件事。。。我建议用此数据填充另一个表,然后重命名这两个表。

您收到此错误,因为子查询只能访问其直接父查询的数据。这意味着您的
选择字符串FROM(),因为x
知道
目标。*
,但不知道子查询。但是,您也不能在单个查询中选择和写入同一个表


虽然可能有一种更奇特的方法来做这件事。。。我建议用这些数据填充另一个表,然后重命名这两个表。

如果您尝试以下SQL,您会发现它实现了您的目标(希望如此):


如果您尝试以下SQL,您会发现它实现了您的目标(希望如此):

输出

╔════╦════════════╦════════════╗
║ ID ║ ORIGINALID ║   STRING   ║
╠════╬════════════╬════════════╣
║  1 ║ (null)     ║ original 1 ║
║  2 ║ (null)     ║ original 2 ║
║  3 ║ 1          ║ original 1 ║
║  4 ║ 2          ║ original 2 ║
║  5 ║ 2          ║ original 2 ║
╚════╩════════════╩════════════╝
输出

╔════╦════════════╦════════════╗
║ ID ║ ORIGINALID ║   STRING   ║
╠════╬════════════╬════════════╣
║  1 ║ (null)     ║ original 1 ║
║  2 ║ (null)     ║ original 2 ║
║  3 ║ 1          ║ original 1 ║
║  4 ║ 2          ║ original 2 ║
║  5 ║ 2          ║ original 2 ║
╚════╩════════════╩════════════╝
比如:

 UPDATE data d
       JOIN
         ( SELECT id, data
             FROM data
             WHERE originalid IS NULL
         ) AS do
  SET d.data = do.data
  WHERE d.originalid = do.id;

类似于:

 UPDATE data d
       JOIN
         ( SELECT id, data
             FROM data
             WHERE originalid IS NULL
         ) AS do
  SET d.data = do.data
  WHERE d.originalid = do.id;

这就是您想要的,以便我可以将其转换为答案吗?这就是你想要的,我可以把它转换成答案吗?
update  data d2 join data d1 on d1.Id = d2.OriginalId
set     d2.data = d1.data;
 UPDATE data d
       JOIN
         ( SELECT id, data
             FROM data
             WHERE originalid IS NULL
         ) AS do
  SET d.data = do.data
  WHERE d.originalid = do.id;