Mysql 使用空值联接
如何处理MySQLMysql 使用空值联接,mysql,join,null,Mysql,Join,Null,如何处理MySQLJOIN如何处理NULL值。由于大多数地址没有第二行地址,address2有许多空值。当我运行基于address1、address2和zip匹配地址的查询时,当只有address1和zip匹配时,查询不会返回正匹配的。我已经确保两个表的address2的值都是NULL时的NULL。因此,基本上要运行查询,我运行两个查询 UPDATE target t JOIN pl2.site2 s ON t.address1=s.address1 AND t.zip5=s.zip5 SET
JOIN
如何处理NULL
值。由于大多数地址没有第二行地址,address2有许多空值。当我运行基于address1、address2和zip匹配地址的查询时,当只有address1和zip匹配时,查询不会返回正匹配的。我已经确保两个表的address2的值都是NULL时的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的工作原理。也许还有另一种解决方案,我不想将列设置为空 有两个选项可以连接空字段。一种是使用
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;
另一个选项是在连接中使用或:
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;