如何在SQL中为列的每个唯一值设置自定义唯一名称
解决方法:用CASE表达式或映射表自定义值别名
嘿,这个需求很容易实现!你可以用SQL的CASE条件表达式来给每个唯一的testVal值指定自定义名称,要是后续需要频繁维护这些映射关系,还可以用专门的映射表来优化。下面给你两种方案:
方案一:直接用CASE表达式(适合少量固定映射)
这是最直接的方式,在查询里通过CASE逐个匹配你的testVal值,返回对应的自定义名称:
SELECT DISTINCT CASE testVal WHEN '169.254.15.169' THEN 'web21' WHEN '10.0.0.91' THEN 'web22' WHEN '192.168.80.47' THEN 'web23' -- 这里可以按需添加其他值的别名 WHEN '10' THEN 'web24' ELSE testVal -- 如果你想保留未设置别名的原值,就用这个;要是想过滤掉,改成ELSE NULL就行 END AS web_alias FROM testTble;
执行这个查询后,你会得到替换后的自定义名称,同时DISTINCT保证结果里没有重复项(不过其实因为原testVal已经是唯一的,这里的DISTINCT也可以省略,看个人习惯)。
方案二:用映射表关联查询(适合多映射或需频繁修改的场景)
如果后续需要经常添加、修改这些别名,单独维护一个映射表会更灵活,不用每次改查询语句:
1. 创建映射表并插入数据
-- 创建存储IP和别名的映射表 CREATE TABLE ip_alias_map ( ip_address VARCHAR(50) PRIMARY KEY, alias VARCHAR(50) NOT NULL ); -- 插入你的映射关系 INSERT INTO ip_alias_map (ip_address, alias) VALUES ('169.254.15.169', 'web21'), ('10.0.0.91', 'web22'), ('192.168.80.47', 'web23'), ('10', 'web24');
2. 关联原表查询
SELECT map.alias AS web_alias FROM testTble JOIN ip_alias_map map ON testTble.testVal = map.ip_address GROUP BY map.alias; -- 用GROUP BY或者DISTINCT都能保证结果唯一
这种方式的好处是,以后要加新的别名或者修改现有别名,只需要操作映射表就行,不用改动原查询,维护起来更方便。
内容的提问来源于stack exchange,提问作者Md. Abu Zaman
相关产品推荐
相关产品推荐

