繁体   English   中英

MYSQL:使用多个字段合并更新字段

[英]MYSQL: Update field with concat of multiple fields

我正在尝试使用同一表的某些字段的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 );

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

有人可以帮我吗?

当这个查询

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是“带分隔符”的缩写,因此第一个参数是分隔符,然后将其置于函数的其他参数之间。 所以你应该这样写:

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

CONCAT_WS()函数的另一个优点是,它忽略NULL值。 阅读手册中有关这两个功能的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM