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

如何在Oracle SQL查询中添加唯一递增的虚拟(dummy)数据?

解决方案:生成唯一递增虚拟列的正确SQL写法

你的问题出在使用CONNECT BY LEVEL <=5时,会对表中每一行都生成多条重复记录,导致同一个MAC_ADDR对应多个虚拟值。要实现每个MAC_ADDR仅对应一行、虚拟值唯一递增的需求,应该使用**窗口函数ROW_NUMBER()**生成序号,再格式化拼接成目标格式。

正确查询语句

SELECT 
    MAC_ADDR,
    CONCAT('test-', TO_CHAR(ROW_NUMBER() OVER (ORDER BY MAC_ADDR), 'FM000')) AS DUMMY_VALUE
FROM MAC_ADDRESS_TABLE;

语句说明

  • ROW_NUMBER() OVER (ORDER BY MAC_ADDR):为表中每一行生成唯一的递增序号,按MAC_ADDR排序可保证序号顺序稳定;如果不需要特定排序逻辑,可替换为ORDER BY NULL(Oracle环境支持)。
  • TO_CHAR(..., 'FM000'):将序号格式化为三位数字,自动补前导0(例如1→001、10→010),FM用于去除数字前的多余空格。
  • CONCAT('test-', ...):将固定前缀与格式化后的序号拼接成test-001这类格式的虚拟值。

原写法错误原因

你之前的CONNECT BY LEVEL <=5会让表中每条MAC_ADDR记录重复生成5次,同时LEVEL值从1到5,导致同一个MAC_ADDR对应多个不同的虚拟值,完全不符合“一行对应一个唯一值”的需求。

内容的提问来源于stack exchange,提问作者singularity098

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:52:41