MySQL JOIN如何处理NULL值。由于大多数地址都没有第二行地址,因此address2有许多NULL值。当我运行查询以基于address1,address2和zip匹配地址时,仅当address1和zip匹配时,查询将不返回正匹配。当它们为NULL时,我已确保两个表的地址2的值都为NULL。所以基本上要运行查询,我运行两个查询。

UPDATE target t
JOIN pl2.site2 s ON t.address1=s.address1 AND t.zip5=s.zip5
SET t.idsite=s.idsite
WHERE t.address2 IS NULL AND s.address2 IS NULL;

UPDATE target t
JOIN pl2.site2 s ON t.address1=s.address1  AND t.address2=s.address2 AND t.zip5=s.zip5
SET t.idsite=s.idsite;


并不是很难的工作。只是试图深入了解SQL的工作原理。也许还有另一种解决方案,我也不想在它们为NULL的情况下将columns设置为“(空白)”。

最佳答案

您有两种选择可以连接空字段。一种是使用COALESCE将空白值转换为空白以进行比较:

UPDATE target t
JOIN pl2.site2 s ON
    t.address1=s.address1 AND
    COALESCE(t.address2,'')=COALESCE(s.address2,'') AND
    t.zip5=s.zip5
SET t.idsite=s.idsite;


另一种选择是在OR中使用JOIN

UPDATE target t
JOIN pl2.site2 s ON
    t.address1=s.address1 AND
    t.zip5=s.zip5 AND
    ((t.address2=s.address2) OR (t.address2 IS NULL AND s.addresss2 IS NULL))
SET t.idsite=s.idsite;

09-30 15:46