【发布时间】:2022-01-25 18:57:31
【问题描述】:
我创建了一个序列,我应该按表顺序按下降顺序按其他列引入该序列。
我创建的这个序列是这样的:
CREATE SEQUENCE seq_athlete_id
INCREMENT BY 1
START WITH 1001
NO CYCLE
OWNED BY tb_athlete.id;
我分配给这张桌子:
CREATE TABLE olympic.tb_athlete (
id CHARACTER INTEGER NOT NULL,
athlete_id CHARACTER(7) NOT NULL,
name CHARACTER VARYING(50) NOT NULL,
country CHARACTER VARYING(3) NOT NULL,
substitute_id CHARACTER(7) DEFAULT NULL,
CONSTRAINT pk_athlete PRIMARY KEY (athlete_id),
CONSTRAINT fk_athlete_substitute FOREIGN KEY (substitute_id) REFERENCES olympic.tb_athlete (athlete_id)
);
然后我尝试用这段代码进行介绍:
SELECT setval('seq_athlete_id'::text,
(SELECT athlete_id
FROM tb_athlete
ORDER BY athlete_id DESC)::bigint);
但是返回错误“一个子查询返回多行作为表达式”。
因为我需要引入与运动员id相反的id顺序,也就是说,运动员id应该从最大值到最小值,id从最小值到最大值。
如何引入应用此序列的顺序?
【问题讨论】:
-
您的意思不是从 1001 开始序列,而是希望从
tb_athlete表中的最大值athlete_id开始? -
是的,你是对的。目标是按运动员id这一列的下降顺序排列
-
可以通过在子查询末尾添加`LIMIT 1`来解决“返回多行...”(请参阅:LIMIT)
标签: postgresql sequence