如何将数字列表转为单列网格?求UNION ALL之外的其他方法
将数字列表转为单列网格的替代方法
除了UNION ALL,根据你使用的数据库类型,还有这些常用实现方式:
1. 递归CTE(通用SQL语法)
递归公共表表达式可以生成连续或指定的数字序列,适合不需要提前创建辅助表的场景:
WITH RECURSIVE nums AS ( SELECT 1 AS num UNION ALL SELECT num + 1 FROM nums WHERE num < 4 -- 这里4是你需要的最大数字,可按需替换 ) SELECT num FROM nums;
2. 数据库内置生成函数
不同数据库有专门的序列生成函数,写法更简洁:
- PostgreSQL:
SELECT generate_series(1, 4) AS num;
- MySQL 8.0+:
SELECT num FROM (SELECT 1 + ROW_NUMBER() OVER () AS num FROM INFORMATION_SCHEMA.COLUMNS LIMIT 4) t;
- SQL Server:
SELECT TOP 4 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS num FROM sys.all_columns;
3. 数字辅助表(适合频繁使用的场景)
如果需要反复生成数字序列,建议提前创建一个持久化的数字辅助表:
-- 先创建表并插入数据 CREATE TABLE numbers (num INT PRIMARY KEY); INSERT INTO numbers VALUES (1), (2), (3), (4); -- 可批量插入更多数值 -- 使用时直接查询 SELECT num FROM numbers WHERE num <= 4;
4. 表值构造函数(部分数据库支持)
SQL Server、PostgreSQL等支持用VALUES子句直接构造单列结果:
SELECT num FROM (VALUES (1), (2), (3), (4)) AS t(num);
内容的提问来源于stack exchange,提问作者MHD
相关产品推荐
相关产品推荐

