使用表格和数据:
CREATE TABLE test.tem(a INT,b INT,INDEX (a),INDEX (b));
INSERT INTO test.tem VALUES(1,2),(1,1),(1,NULL),(2,3);
现在数据应该是:
+------+------+
| a | b |
+------+------+
| 1 | 2 |
| 1 | 1 |
| 1 | NULL |
| 2 | 3 |
+------+------+
我想按 a 列将 b 列更新为 min(b) 组。
我知道一个正确的 SQL 是:
UPDATE tem AS t1
JOIN (SELECT a,MIN(b) AS m FROM tem GROUP BY a) AS t2
USING (a)
SET t1.b = t2.m;
产生正确的结果是:
+------+------+
| a | b |
+------+------+
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 2 | 3 |
+------+------+
但是,使用此 SQL 查询在一个包含 450 万条记录的表中更新大约需要 5 分钟。
所以,我有一个自己的 SQL:
UPDATE test.tem t1
JOIN test.tem t2
ON t1.a = t2.a
SET t1.b = t2.b
WHERE t1.b > t2.b
OR t1.b IS NULL;
但它得到了错误的结果:
+------+------+
| a | b |
+------+------+
| 1 | 1 |
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
+------+------+
我认为原因是关于 MYSQL 在更新时如何工作。谁能告诉我不正确的结果是如何产生的?如果有人可以修复我的SQL,那也会有所帮助。