更新基于来自另一个表的联接的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)

+0

啊有趣的是,我从来没有明白过使用。这比我想象的要简单得多。谢谢! – citizenen 2012-07-10 16:04:01

+1

是的,'USING'是我命名主键的唯一动机,如下所示:student_id'而不是'students.id',因为它使它变得如此简单:-) – 2012-07-10 16:04:54

+1

+1虽然,由于我们不匹配在一个独特的价值。 – 2012-07-10 16:25:55