2017-08-03 73 views
1

我有有数据,如如何更新同桌同一ID记录在MySQL

------------------------------- 
code  value 
------------------------------- 
02  null 
05  null 
06  hi 
02  hello 
05  how 

我想更新为

------------------------------- 
id  value 
------------------------------- 
02  hello 
05  how 
06  hi 
02  hello 
05  how 

我用下面的同一个表的表Table1查询,但不工作:

update Table1 set value=value where id is null 
+0

一个ID必须是唯一的。为什么你多次使用它? – Jens

+0

可能的重复[如何在SQL中使用JOIN执行UPDATE语句?](https://stackoverflow.com/questions/1293330/how-can-i-do-an-update-statement-with-join-in -sql) – Jens

+0

你不能使用id作为'主键'吗?一个ID必须是唯一的。 –

回答

0

您需要一个join来连接两个表(相关子查询有猫腻在MySQL UPDATE语句):

update table1 t1 join 
     (select id, min(value) as value 
     from table1 
     group by id 
     ) tt1 
     on t1.id = tt.id 
    set t1.value = tt1.value 
    where t1.value is null; 
1

您需要创建表1设定值,比别名为如下空记录:

UPDATE Table1 t1, (
    SELECT DISTINCT id, value 
    FROM Table1 
    WHERE value IS NOT NULL AND value != '' 
) t2 SET t1.value = t2.value 
WHERE t1.id = t2.id; 

上面的查询进行了测试和加工。

0

我认为有一个简单的语法:

update t1 from table1 t1, table2 t2 set t1.value=t2.value where t1.code=t2.id 

尽管我现在还没有测试它。

+0

对于这个特定的例子,这可能是正确的,但我不认为这个解决方案扩大到更一般的答案。 – Strawberry

-1

查询应该写成:

更新表1设定值=”'其中id = 1

这里的值是列名,你想更新一些内容(HI,你好等),以它。如果内容是字符串,则用单引号或双引号括起来。 WHERE子句之后,你想要更新哪一行。在这里,您将条件设置为WHERE id = 1。因此,对于id = 1,值会更新。

+0

看起来问题可能不正确,因为他们之后的结果。我可以看到之前和之后的唯一区别在于'代码'列已成为'id'列。而不是更新,我认为用户是在一个alter table语句之后。 – Paul

0

生成SELECT语句的脚本并执行它(不要忘了提交末):

select concat('update Table1 set value=`', value, '` where id =', id, ';') as script from Table1 where value is not null;