MYSQL:包含多个字段的连接的更新字段

时间:2013-11-07 12:45:58

标签: mysql

我正在尝试使用同一个表的某些字段的CONCAT更新我的表的字段。

这是什么

UPDATE tabex SET field1=CONCAT(tabex.a1,', ',tabex.a2,', ',tabex.a3,', ',tabex.a4,', ',tabex.a5,', ',tabex.a6,', 'tabex.a7,', ',tabex.a8,', ',tabex.a9 );

此查询有0行受影响,没有错误。

使用其他查询

UPDATE tabex SET field1=CONCAT_WS(tabex.a1,', ',tabex.a2,', ',tabex.a3,', ',tabex.a4,', ',tabex.a5,', ',tabex.a6,', 'tabex.a7,', ',tabex.a8,', ',tabex.a9 );

如果某些(n)字段的内容为NULL,则mysql会放置先前结果的副本

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

当此查询

UPDATE tabex SET field1=CONCAT(tabex.a1,', ',tabex.a2,', ',tabex.a3,', ',tabex.a4,', ',tabex.a5,', ',tabex.a6,', 'tabex.a7,', ',tabex.a8,', ',tabex.a9 );

不会影响一行,唯一的解释是该表为空。它会更新表中的每一行。但是,如果其中一列为NULL,则field1列也将为NULL 为避免这种情况,您必须使用COALESCE()函数。此函数返回其第一个非NULL的参数。

UPDATE tabex SET field1=CONCAT(COALESCE(tabex.a1, ''),', ',...);

在旁注中我不得不问,为什么你要这样做。在大多数情况下,列中逗号分隔的值是个坏主意。

最后,使用CONCAT_WS()的查询是错误的。函数名中的_WS是“with separator”的缩写,因此第一个参数是分隔符,然后放在函数的其他参数之间。所以你应该这样写:

UPDATE tabex SET field1=CONCAT_WS(',', tabex.a1, tabex.a2, tabex.a3,...);

CONCAT_WS()函数的另一个优点是它忽略了NULL值。详细了解manual中的两个函数。