Mysql
 sql >> Datenbank >  >> RDS >> Mysql

wie mysql update self table funktioniert

Sie haben keine eindeutige Spalte, um Ihre Zeilen zu identifizieren. Also IhrJOIN wird wahrscheinlich mehr Zeilen aktualisieren, als Sie denken.

Wahrscheinlich möchten Sie stattdessen etwas in der Art:

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;

Siehe http://sqlfiddle.com/#!2/c6a04/1

Wenn Sie nur die Zeilen mit NULL aktualisieren möchten in Spalte b , das ist nur eine Frage von WHERE Klausel:

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;

Siehe http://sqlfiddle.com/#!2/31ffb/1