2017-08-03 65 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;