2010-07-16 17 views
1

J'ai deux tables, t1 et t2 avec deux colonnes chacune - id_user et age.
Comment puis-je mettre à jour t1.age au plus grand de t1.age et t2.age pour les ID correspondants et laisser t1.age inchangé s'il n'y a aucun ID correspondant dans t2.MySQL (MyISAM) - champ de mise à jour du plus grand des deux champs de tables différentes

Avant la mise à jour:

 
t1 
+-------+---+ 
|id_user|age| 
+-------+---+ 
|  1| 5| 
+-------+---+ 
|  2| 10| 
+-------+---+ 
|  3| 10| 
+-------+---+ 

t2 
+-------+---+ 
|id_user|age| 
+-------+---+ 
|  2| 12| 
+-------+---+ 
|  3| 8| 
+-------+---+ 
|  4| 20| 
+-------+---+ 

Après mise à jour:

 
t1 
+-------+---+ 
|id_user|age| 
+-------+---+ 
|  1| 5| 
+-------+---+ 
|  2| 12| 
+-------+---+ 
|  3| 10| 
+-------+---+ 

Répondre

2

Vous pouvez essayer:

UPDATE t1 
JOIN t2 ON (t2.id_user = t1.id_user) 
SET  t1.age = t2.age 
WHERE t2.age > t1.age; 

Test Case:

CREATE TABLE t1 (id_user int, age int); 
CREATE TABLE t2 (id_user int, age int); 

INSERT INTO t1 VALUES (1, 5); 
INSERT INTO t1 VALUES (2, 10); 
INSERT INTO t1 VALUES (3, 10); 

INSERT INTO t2 VALUES (2, 12); 
INSERT INTO t2 VALUES (3, 8); 
INSERT INTO t2 VALUES (4, 20); 

Résultat:

SELECT * FROM t1; 
+---------+------+ 
| id_user | age | 
+---------+------+ 
|  1 | 5 | 
|  2 | 12 | 
|  3 | 10 | 
+---------+------+ 
3 rows in set (0.00 sec) 
0
UPDATE t1 
SET age = T2.age 
FROM t1 
INNER JOIN t2 
ON t2.id_user = t1.id_user 
WHERE t2.age > t1.age 
+0

Je ne pense pas que vous * ne pas * besoin d'un 'FROM' là-dedans :) –

+0

Vraiment? Je viens d'un arrière-plan SQL Server où une telle gentillesse est nécessaire - merci pour la tête haute. –

+0

MySQL n'appréciera pas :) ... BTW: J'ai eu une faute de frappe dans le commentaire ci-dessus. J'ai évidemment l'intention "Je * ne * pense pas que vous avez besoin d'un" FROM "..." –