MySQL条件生成新列:基于table_1的col_new查询需求
MySQL 查询生成新列 col_new 的解决方案
这题用MySQL的CASE WHEN条件判断就能轻松实现需求,直接上完整的查询语句,再拆解逻辑:
SELECT col_1, CASE -- 覆盖规则1和2:col_2或col_3任意一个为NULL时,col_new设为NULL WHEN col_2 IS NULL OR col_3 IS NULL THEN NULL -- 处理特殊情况:col_2、col_3都非空且col_3是'CCC'时,拼接指定内容 WHEN col_3 = 'CCC' THEN CONCAT(col_3, 'v', col_4) -- 规则3的常规情况:两者都非空且不是特殊值,直接取col_3 ELSE col_3 END AS col_new FROM table_1;
逻辑拆解:
- 第一个
WHEN把规则1和规则2合并处理了,因为不管是col_2为NULL,还是col_2非空但col_3为NULL,最终结果都是NULL,用OR连接两个条件更简洁高效。 - 第二个
WHEN专门处理特殊场景,当col_3等于'CCC'时,调用CONCAT()函数拼接col_3、固定字符v和col_4的内容。 - 最后的
ELSE对应规则3的常规情况:当col_2和col_3都非空,且col_3不是'CCC'时,直接返回col_3的值。
额外提示:
如果col_4可能存在NULL值,拼接后会导致整个结果变为NULL。要是希望这种情况下依然保留CCCv的前缀,可以用COALESCE()函数把NULL转为空字符串,修改后的拼接语句如下:
CONCAT(col_3, 'v', COALESCE(col_4, ''))
内容的提问来源于stack exchange,提问作者300
相关产品推荐
相关产品推荐

