行を識別するための一意の列はありません。つまり、JOIN
おそらくあなたが思うようにもっと多くの行を更新するでしょう。
代わりに、おそらくそのようなものが必要です:
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;
http://sqlfiddle.com/#!2/c6a04/1 を参照してください。
NULL
を持つ行のみを更新する場合 列b 、これはWHERE
の問題です 条項:
CREATE TABLE tem(a INT,b INT);
INSERT INTO tem VALUES(1,2),(1,1),(1,NULL),(2,3);
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
WHERE t1.b IS NULL;
http://sqlfiddle.com/#!2/31ffb/1 を参照してください。