我正在对表进行一个简单的更新,我将三个字段连接起来:
Update TableA concat(Field1,Field2,Field3)
问题是在某些记录中,一个或多个字段可以为NULL。这些记录最终没有更新字段。在以下情况下,我希望第一条记录的更新字段为BobJones
:
+--------+--------+---------+--------------+
| Field1 | Field2 | Field3 | Update |
+--------+--------+---------+--------------+
| Bob | NULL | Jones | NULL |
+--------+--------+---------+--------------+
| Mary | Ann | Smith | MaryAnnSmith |
+--------+--------+---------+--------------+
| Bill | | Clinton | BillClinton |
+--------+--------+---------+--------------+
但Update
完全忽略了它。我试着以Update IGNORE
的方式尝试,但也失败了。是的,我知道我可以做Case When Then
事情,但它比我在这种情况下更复杂,并且希望有一些版本的“更新IGNORE”可以起作用。
答案 0 :(得分:1)
在mysql中使用ifnull
concat(ifnull(Field1,''),ifnull(Field2,''),ifnull(Field3,''))
答案 1 :(得分:1)
使用时间更短:
CONCAT_WS('',字段1,字段2,字段3);
<强>示例强>
MariaDB []> SELECT CONCAT_WS('', 'Bob',NULL,'Jones',NULL), CONCAT_WS(' ', 'Bob',NULL,'Jones',NULL), CONCAT_WS('Bob',NULL,'Jones',NULL);
+----------------------------------------+-----------------------------------------+------------------------------------+
| CONCAT_WS('', 'Bob',NULL,'Jones',NULL) | CONCAT_WS(' ', 'Bob',NULL,'Jones',NULL) | CONCAT_WS('Bob',NULL,'Jones',NULL) |
+----------------------------------------+-----------------------------------------+------------------------------------+
| BobJones | Bob Jones | Jones |
+----------------------------------------+-----------------------------------------+------------------------------------+
1 row in set (0.00 sec)
MariaDB []>
答案 2 :(得分:0)
您可以为每个NULL值插入零长度字符串,并使用IFNULL
或COALESCE
:
Update TableA concat(IFNULL(Field1,''),IFNULL(Field2,''),IFNULL(Field3,''))