Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 使用同一表中另一行的数据更新行_Mysql - Fatal编程技术网

Mysql 使用同一表中另一行的数据更新行

Mysql 使用同一表中另一行的数据更新行,mysql,Mysql,我有一张像这样的桌子 ID | NAME | VALUE | ---------------------------- 1 | Test | VALUE1 | 2 | Test2 | VALUE2 | 1 | Test2 | | 4 | Test | | 1 | Test3 | VALUE3 | 我正在寻找一种方法来更新值“Test2”和“Test”,使用来自“VA

我有一张像这样的桌子

ID   |   NAME    |  VALUE  |
----------------------------
 1   |   Test    |  VALUE1 |
 2   |   Test2   |  VALUE2 |
 1   |   Test2   |         |
 4   |   Test    |         |
 1   |   Test3   |  VALUE3 |
我正在寻找一种方法来更新值“Test2”和“Test”,使用来自“VALUE”列中具有相同“NAME”的其他行的数据。这里的ID不是唯一的,ID和NAME的复合键使行唯一。例如,我要查找的输出是:

ID   |   NAME    |  VALUE  |
----------------------------
 1   |   Test    |  VALUE1 |
 2   |   Test2   |  VALUE2 |
 1   |   Test2   |  VALUE2 |
 4   |   Test    |  VALUE1 |
 1   |   Test3   |  VALUE3 |
如果它在另一个表中,我会很好,但我不知道如何使用相同的名称值引用当前表中的不同行

更新

修改manji查询后,下面是我用于工作解决方案的查询。谢谢大家

UPDATE data_table dt1, data_table dt2 
SET dt1.VALUE = dt2.VALUE 
WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '' AND dt2.VALUE != '' 
试试这个:

UPDATE data_table t, (SELECT DISTINCT ID, NAME, VALUE
                        FROM data_table
                       WHERE VALUE IS NOT NULL AND VALUE != '') t1
   SET t.VALUE = t1.VALUE
 WHERE t.ID = t1.ID
   AND t.NAME = t1.NAME
我的建议是:

UPDATE test as t1 
    INNER JOIN test as t2 ON 
        t1.NAME = t2.NAME AND 
        t2.value IS NOT NULL 
SET t1.VALUE = t2.VALUE;

编辑:删除多余的t1.id!=t2.id条件。

如果只需要插入包含另一行数据的新行

UPDATE financialyear
   SET firstsemfrom = dt2.firstsemfrom,
       firstsemto = dt2.firstsemto,
       secondsemfrom = dt2.secondsemfrom,
       secondsemto = dt2.secondsemto
  from financialyear dt2
 WHERE financialyear.financialyearkey = 141
   AND dt2.financialyearkey = 140
    insert into ORDER_ITEM select * from ORDER_ITEM where ITEM_NUMBER =123;

有点像一个傻瓜,但我相信这可以通过使用临时表来完成。在临时表中选择值为null的名称,然后填入值,然后将这些值填入名称匹配的原始表中。您能否更具体地说明它们如何从其他行获取数据?从这个例子来看,似乎您希望为所有具有相同名称的对象也赋予相同的值,这是否正确?ID在这里重要吗?@Gustav,我找到了一个解决方案,见下文,但是的,目的是让相同名称的相同列具有相同的值。ID不相关更新Test2子句中的Test2是什么?@zerkms-意识到他说的不是从一个表更新另一个表,而是更新同一个表。在manji的回答中,我认为这将不起作用,因为您选择的是同一个表updating@zerkms-没有。它会起作用的。您只需在子查询中为表添加别名即可。除了MySQL之外,这在HSQLDB中也适用。其他一些MySQL答案在HSQLDB中不起作用。不,这是不可能的,但我从一个临时表t1中选择,我是从updatetarget.nope创建的,但我读了这篇文章。让我们等待OP测试;我没有使用您的确切代码,但它提示我尝试另一个查询:更新数据表dt1,数据表dt2设置dt1.VALUE=dt2.VALUE,其中dt1.NAME=dt2.NAME和dt1.VALUE=和dt2.VALUE!=这确实有效。我没有意识到在一个查询中可以使用同一个表两次,并使用不同的引用。谢谢@斯里克:回答你自己的问题并接受这个答案是完全可以接受的。这突出了正确的答案。或者您可以编辑manji的答案,使之成为实际有效的答案。在sql developer for Oracle DB上尝试此功能。它给出了错误,并表示缺少SET关键字。有线索吗?
    insert into ORDER_ITEM select * from ORDER_ITEM where ITEM_NUMBER =123;