我有一张表,其中包含一些出错的数据,我需要修复。以下是一个例子:
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 2
和3
的值会更新为123456
id 6
不会更新,因为“值”对于相同的“类型”不是唯一的。
答案 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