PostgreSQL复合主键和串行增量?

时间:2015-12-03 19:27:43

标签: sql database postgresql postgresql-9.1

我正在尝试创建一个表格如下:

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中实现这个目标吗?

2 个答案:

答案 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
)
相关问题