我想知道是否可以即时添加自动递增整数字段,即无需在CREATE TABLE语句中定义它?
例如,我有一条声明:
SELECT 1 AS id, t.type FROM t;
Run Code Online (Sandbox Code Playgroud)
我可以将其更改为
SELECT some_nextval_magic AS id, t.type FROM t;
Run Code Online (Sandbox Code Playgroud)
我需要在some_nextval_magic零件中动态创建自动递增字段,因为结果关系是在构建更大的SQL语句期间的临时关系。id只要它是唯一的,字段的价值就不是很重要。
我搜索在这里,答案和相关问题(如PostgreSQL的自动增量)大部分涉及指定SERIAL或使用nextval在CREATE TABLE。但我不一定要使用CREATE TABLE或VIEW(除非必须)。也有关于的讨论generate_series(),但不确定在这里是否适用。
-更新-
在有关GIS扩展的GIS.SE答案中说明了我的动机。原始查询为:
CREATE VIEW buffer40units AS
SELECT
g.path[1] as gid,
g.geom::geometry(Polygon, 31492) as geom
FROM
(SELECT
(ST_Dump(ST_UNION(ST_Buffer(geom, 40)))).*
FROM point
) as g;
Run Code Online (Sandbox Code Playgroud)
g.path[1] as gidid字段在哪里,“在QGIS中进行可视化所需”。我相信唯一的要求是它在表中是整数且唯一。当g.path[]数组为空时,运行上述查询时遇到一些错误。
在尝试修复上述查询中的数组时,我想到了这个想法:
由于该gid值无所谓,因此这里可以使用自动递增功能吗?
如果希望有一个id字段为输出中的每一行分配一个唯一的整数,请使用row_number()窗口函数:
select
row_number() over () as id,
t.type from t;
Run Code Online (Sandbox Code Playgroud)
所生成的id仅在每次查询执行期间是唯一的。多次执行不会为生成新的唯一值id。
| 归档时间: |
|
| 查看次数: |
3244 次 |
| 最近记录: |