Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

como funciona a auto-tabela de atualização do mysql


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