[英]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.