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;