Você não tem uma coluna exclusiva para identificar suas linhas. Então seu
JOIN
provavelmente atualizará mais linhas como você pensa. Você provavelmente quer algo assim em vez disso:
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;
Consulte http://sqlfiddle.com/#!2/c6a04/1
Se você deseja apenas atualizar as linhas com
NULL
na coluna b , isso é apenas uma questão de WHERE
cláusula: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;
Consulte http://sqlfiddle.com/#!2/31ffb/1