我正在尝试使用同一个表的某些字段的 CONCAT 更新我的表的一个字段。
这
UPDATE tabex SET field1=CONCAT(tabex.a1,', ',tabex.a2,', ',tabex.a3,', ',tabex.a4,', ',tabex.a5,', ',tabex.a6,', 'tabex.a7,', ',tabex.a8,', ',tabex.a9 );
Run Code Online (Sandbox Code Playgroud)
此查询有 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 );
Run Code Online (Sandbox Code Playgroud)
如果某些 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 );
Run Code Online (Sandbox Code Playgroud)
不影响一行,唯一的解释是,表是空的。它会更新表中的每一行。但如果其中一列为 NULL,则您的 field1 列也将为 NULL。
为了避免这种情况,您必须使用 COALESCE() 函数。该函数返回它的第一个不为 NULL 的参数。
UPDATE tabex SET field1=CONCAT(COALESCE(tabex.a1, ''),', ',...);
Run Code Online (Sandbox Code Playgroud)
在旁注中,我不得不问,你为什么要这样做。大多数情况下,列中的逗号分隔值是一个坏主意。
最后,您使用 CONCAT_WS() 的查询是错误的。函数名中的 _WS 是“with separator”的缩写,所以第一个参数是分隔符,然后放在函数的其他参数之间。所以你应该这样写:
UPDATE tabex SET field1=CONCAT_WS(',', tabex.a1, tabex.a2, tabex.a3,...);
Run Code Online (Sandbox Code Playgroud)
CONCAT_WS() 函数的另一个优点是,它忽略 NULL 值。在手册中阅读有关这两个功能的更多信息。