MYSQL:使用多个字段的连接更新字段

Han*_*nzo 3 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 );
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 会放一份先前结果的副本

有人可以帮助我吗?

fan*_*nts 5

当这个查询

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 值。在手册中阅读有关这两个功能的更多信息。