2010-07-16 72 views
1

我有两个表,t1t2,每个表有两列 - id_userage
如果在t2中没有匹配的ID,如何将t1.age更新为最大的t1.aget2.age以匹配ID并保持t1.age不变。MySQL(MyISAM) - 将字段更新为来自不同表的两个字段中的最大字段

更新前:

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

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

更新后:

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

回答

2

您可能也想尝试:

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

测试用例:

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); 

结果:

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

我不认为你*不*需要一个'FROM'在那里:) – 2010-07-16 20:30:20

+0

真的吗?我来自SQL Server后台,需要这样的好处 - 谢谢你的提高。 – 2010-07-16 20:38:35

+0

MySQL不会欣赏:) ...顺便说一句:我在上面的评论中有一个错字。我显然希望“我*不认为你需要一个'FROM' ...” – 2010-07-16 20:45:14

相关问题