我正在尝试创建一个表格如下:
CREATE TABLE SCHEDULE (
SESSIONID SERIAL,
MODULECODE VARCHAR(10),
CONSTRAINT SCHEDULE_FOREIGN_KEY FOREIGN KEY (MODULECODE) REFERENCES MODULES (MODULECODE),
CONSTRAINT SCHEDULE_PRIMARY_KEY PRIMARY KEY (SESSIONID, MODULECODE));
这个想法是SESSION ID
会自动增加每个新行,但只有MODULECODE
的本地行,例如:
----------------------
|SESSIONID|MODULECODE|
|---------|----------|
| 1 | A |
| 2 | A |
| 3 | A |
| 1 | B |
| 2 | B |
| 1 | C |
| 2 | C |
|--------------------|
我相信这是AUTO_INCREMENT
在MySQL中的功能,但我怀疑PostgreSQL不会这样工作。我还能在PostgreSQL中实现这个目标吗?
答案 0 :(得分:1)
小时候说你不能在你的数据库上做这件事。但您可以在选择
中设置这些值 SELECT row_number() over (partition by MODULECODE order by MODULECODE) as SESSIONID,
MODULECODE
FROM YourTable
答案 1 :(得分:1)
按照@Juan
的建议显示数据select
row_number() over (
partition by modulecode order by modulecode
) as sessionid,
modulecode
from schedule
然后当用户从某个模块请求某个sessionid时:
select *
from schedule
where sessionid = (
select sessionid
from (
select
sessionid,
row_number() over (order by sessionid) as module_sessionid
from schedule
where modulecode = 'B'
) s
where module_sessionid = 2
)