我正在尝试使用同一个表的某些字段的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会放置先前结果的副本
有人可以帮助我吗?
答案 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中的两个函数。