2011-07-02 24 views
2

我有一張表,其中有些數據出錯了,我需要修正。下面是一個例子:MYSQL從同一表內更新

TABLE-A 
id, type, value 
1, 10, 123456 
2, 10, NULL 
3, 10, NULL 
4, 20, 123456 
5, 20, 654321 
6, 20, NULL 

我需要一個MYSQL更新命令。

如果「類型」是一樣的,然後更新「值」,因此它是一樣的,只要值爲NULL和「價值」是唯一

UPDATE table-a SET value = (...)

所以在表以上只有id 23的值將更新爲123456

id 6將不會更新,因爲「值」對於相同的「類型」不是唯一的。

+0

「ID應該是什麼樣的價值「在上面的例子中是6,因爲它可以更新爲123456或654321? – WordsWorth

+0

它不應該更新,我將不得不手動更新這些。 –

+0

我不會建議你在單個查詢中完成它。單個查詢可能很複雜。使用PHP或其他語言,您正在使用。 – WordsWorth

回答

4
UPDATE TABLE_A t 
     JOIN 
      (SELECT type 
        , MIN(value) AS value 
      FROM TABLE_A 
      GROUP BY type 
      HAVING COUNT(DISTINCT value) = 1 
      ) AS tu 
     ON tu.type = t.type 
SET t.value = tu.value 
WHERE t.value IS NULL 

由於Peufeu指出,該DISTINCT需要追趕的情況下像這樣的,在這裏我想通過ID = 3的行必須更新,太:

TABLE-A 
id | type | value 
1 | 10 | 123456 
2 | 10 | 123456 
3 | 10 | NULL 
4 | 20 | 123456 
5 | 20 | 654321 
6 | 20 | NULL 
+1

count(value)在這裏是錯誤的:你的意思是計數(DISTINCT值)我猜。 – peufeu

+0

@peufeu:是的,我猜'COUNT(DISTINCT值)'更正確。它將捕獲對於一個類型有兩個或更多行具有完全相同值並且所有其他行都爲NULL的情況。日Thnx。 –

+0

適用於我的示例,謝謝。但是如果表有7,30,123456 8,30,123456 9,30,NULL則ID 9不更新 –