在我的 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;
UPDATE
显然 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;
UPDATE 2
经过一段时间的观察后,我确信WHERE
条款是问题:
WHERE temp1.name IS NOT NULL
无论如何,您都无法加入空值,因此默认情况下它们会被过滤掉。这WHERE
子句在某种程度上干扰了连接。
尝试将其删除,看看是否UPDATE
作品。如果您不想立即执行和更新,只需使用相同的内容执行选择即可JOIN CLAUSE
查看哪些记录会受到影响。
这是一般参考NULL
and JOIN
:
http://databases.about.com/library/weekly/aa051203a.htm http://databases.about.com/library/weekly/aa051203a.htm
以下是符合上述要求的 SQL Server 参考:http://msdn.microsoft.com/en-us/library/ms190409.aspx http://msdn.microsoft.com/en-us/library/ms190409.aspx
找不到明确说明这一点的 MySQL 参考,但我认为这对于所有关系数据库都是如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)