在我的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;
您需要将要更新的表与查询的表分开,即使它是相同的:
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 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 无论如何,您都不能加入null值,因此默认情况下会将它们过滤掉。该WHERE子句以某种方式干扰了连接。 尝试将其删除,看看是否UPDATE可行。如果您不希望立即执行和更新,只需执行一次具有相同选择的选择,JOIN CLAUSE以查看哪些记录将受到影响。
WHERE
WHERE temp1.name IS NOT NULL
UPDATE
JOIN CLAUSE
NULL
JOIN
这是符合上述要求的SQL Server参考:http : //msdn.microsoft.com/zh- cn/library/ms190409.aspx
找不到明确指出这一点的MySQL引用,但我认为这对于所有关系数据库都是正确的。