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

sli*_*ick 54 mysql

我有一张看起来像这样的桌子

ID   |   NAME    |  VALUE  |
----------------------------
 1   |   Test    |  VALUE1 |
 2   |   Test2   |  VALUE2 |
 1   |   Test2   |         |
 4   |   Test    |         |
 1   |   Test3   |  VALUE3 |
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来更新值'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 |
Run Code Online (Sandbox Code Playgroud)

如果它在另一个表中我会没事的,但是我不知道如何使用相同的NAME值引用当前表中的不同行.

更新

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

UPDATE data_table dt1, data_table dt2 
SET dt1.VALUE = dt2.VALUE 
WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '' AND dt2.VALUE != '' 
Run Code Online (Sandbox Code Playgroud)

man*_*nji 69

试试这个:

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
Run Code Online (Sandbox Code Playgroud)

  • 我没有使用您的确切代码,但它促使我尝试另一个查询:UPDATE data_table dt1,data_table dt2 SET dt1.VALUE = dt2.VALUE WHERE dt1.NAME = dt2.NAME AND dt1.VALUE =''AND dt2. VALUE!=''确实有效.我没有意识到你可以在具有不同引用的查询中使用相同的表两次.谢谢! (11认同)
  • 不,这是不可能的,但我从一个临时表`t1`中选择我正在从更新目标创建. (2认同)

Gus*_*son 16

这是我的去处:

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;
Run Code Online (Sandbox Code Playgroud)

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