在我的mysql中我有t1,t2表,我想根据t1的字段值匹配t2的字段值从t2的字段值更新t1的字段
我尝试了以下但它没有更新。我在这里做错了什么
UPDATE t1
INNER JOIN t2
ON t1.name = t2.name
SET t1.age = t2.age
WHERE t1.name IS NOT NULL;
答案 0 :(得分:2)
您需要将要更新的表与查询表分开,即使它是相同的:
UPDATE t1
SET t1.age = t2.age
FROM t1 as tempT1
INNER JOIN t2
ON tempT1.name = t2.name
WHERE tempT1.name IS NOT NULL;
<强>更新强>
显然MySQL正在使用与其他数据库不同的UPDATE JOIN
语法。您的初始查询似乎使用了正确的语法,只是为了确保尝试对表名进行别名:
UPDATE t1 temp1
INNER JOIN t2 temp2
ON temp1.name = temp2.name
SET temp1.age = temp2.age
WHERE temp1.name IS NOT NULL;
更新2
看了这一点后,我确定WHERE
条款是问题:
WHERE temp1.name IS NOT NULL
无论如何,您无法加入空值,因此默认情况下会过滤掉它们。 WHERE
子句以某种方式干扰了连接
尝试删除它以查看UPDATE
是否有效。如果您不想立即执行和更新,只需执行具有相同JOIN CLAUSE
的选择即可查看哪些记录会受到影响。
以下是NULL
和JOIN
的一般参考:
http://databases.about.com/library/weekly/aa051203a.htm
以下是符合上述内容的SQL Server参考:http://msdn.microsoft.com/en-us/library/ms190409.aspx
无法找到明确说明这一点的MySQL引用,但我认为对于所有关系数据库都是如此。
答案 1 :(得分:1)
我自己也找到了实现同样方案的另一种方法。我在这里粘贴答案,以便其他人获益。
UPDATE t1 SET t2_age = (SELECT age FROM t2 BINARY WHERE name = t1.name);
答案 2 :(得分:0)
试试这个:
update t1
set t1.age = t2.age
from t1
inner join t2 on t1.name = t2.name
where t1.name is not null
答案 3 :(得分:0)
试试这个
UPDATE t1,t2
SET t1.age = t2.age
FROM t1 as tempT1
INNER JOIN t2 ON tempT1.name = t2.name
WHERE tempT1.name IS NOT NULL;