更新基于来自另一个表的联接的MySQL空值
问题描述:
我有两个表,一个Master和一个ExtraData。两个表共享列FirstName, LastName, Gender and A_Id
。更新基于来自另一个表的联接的MySQL空值
我正在处理的查询应该比较两个表和UPDATE
任何NULL的A_Id
在Master中使用A_Id
在Extra中。
这样做的最好方法是什么?我可以比较CONCAT(FirstName, LastName, Gender)
,但我坚持如何更新基于JOIN
的列。
答
您可以在加入使用许多条件,然后简单地设置在一个源表中的列到列的另一个表中的值:
UPDATE Master
JOIN ExtraData
ON Master.FirstName = ExtraData.FirstName
AND Master.LastName = ExtraData.LastName
AND Master.Gender = ExtraData.Gender
SET Master.A_Id = ExtraData.A_Id
WHERE Master.A_Id IS NULL
注意,JOIN条件可以更简洁(因为列名相同):JOIN ExtraData USING (FirstName, LastName, Gender)
啊有趣的是,我从来没有明白过使用。这比我想象的要简单得多。谢谢! – citizenen 2012-07-10 16:04:01
是的,'USING'是我命名主键的唯一动机,如下所示:student_id'而不是'students.id',因为它使它变得如此简单:-) – 2012-07-10 16:04:54
+1虽然,由于我们不匹配在一个独特的价值。 – 2012-07-10 16:25:55