同一个表中的MYSQL更新

时间:2011-07-02 10:22:42

标签: 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更新命令。

如果“type”相同则更新“value”,只要值为NULL并且“value”是唯一的,它就是相同的

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

因此,在上表中,只有id 23的值会更新为123456

id 6不会更新,因为“值”对于相同的“类型”不是唯一的。

1 个答案:

答案 0 :(得分: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
相关问题