在 mySQL 中 , 我 有 一 个 表 :
| 标识 符|姓名|代码 1|代码 2|代码 3|
| - -| - -| - -| - -| - -|
| 一 个|吉姆|美国 汽车 协会|美国 汽车 协会|一 种|
| 2 个|赖恩|bb 型|bbb 型|最 佳|
| 三 个|泰德|C 语言|C 语言|抄送|
预期 输出 :
| 标识 符|姓名|串 接 代码|
| - -| - -| - -|
| 一 个|吉姆|aaa/年|
| 2 个|赖恩|bb/bb/b|
| 三 个|泰德|抄送|
我 试 了 一下 下面 的 查询 :
select
id,
name,
concat_ws("/",NULLIF(code1,""),NULLIF(code2,""),NULLIF(code3,"")) as concat_code
from
table1
group by id
中 的 每 一 个
但 它 给出 了 错误 的 输出 :
| 标识 符|姓名|串 接 代码|
| - -| - -| - -|
| 一 个|吉姆|aaa/aaa/a|
| 2 个|赖恩|bb/bb/b|
| 三 个|泰德|抄送|
如何 在 concat _ ws ( ) 中 使用 不同 的 组合 ?
2条答案
按热度按时间thtygnil1#
这是一个示例,说明为什么具有列foo 1、foo 2等是糟糕的数据库设计;在一对多关系中应该有一个单独的表,它与原始表的每一行都有一个foo值。
或者对code 2、code 3等使用卷积表达式,如果代码与concat_ws调用中前面的任何代码匹配,则该表达式返回null。
rqenqsqc2#
有点晚了,但对于其他人谷歌:尝试:
CASE的作用相当于具有多个字符串值的NULLIF,其中一些是以前的值,以防止重复。
我省略了GROUP BY id,因为id似乎是主键,这使得该语句毫无用处。