sql - PostgreSQL 复合主键和序列增量?

标签 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 中实现这一点?

最佳答案

按照@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
)

关于sql - PostgreSQL 复合主键和序列增量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34074502/

相关文章:

mysql - 将属性名称与 MySQL 中的表名称连接起来

sql - 变量在 IF NOT EXISTS .. CREATE TABLE 查询中不起作用,我不知道为什么

node.js - 安装pg Node 模块时出错

sql - 总是四舍五入到特定的小数位?

SQL Server : Canonical way to get a substring from a particular index to the end of the string?

SQL Server : calculate column value based on value in previous row/id

sql - 您如何创建和更新 SQL 脚本?

postgresql - 我可以在 postgresql 中使用另一个数据库的表,但给人的印象是该表存在于同一个数据库中吗?

sql - 在 SQL 中使用记录作为表名

python - postgresql django 中的大概行数