You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:13:52