我想问你,当一列是1的时候,唯一的字段是可能的吗?

我有一个表Sales,定义如下:

CREATE TABLE sales 
(
    id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    p_id UUID REFERENCES product(id),
    percentage SMALLINT,
    expires timestamp NOT NULL,
    active SMALLINT DEFAULT 1,
    created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
)

我想说,当p_id存在时,active是1,那么我想避免任何人可以再次插入这个.

active为0时,则可以插入具有active = 1的产品ID

推荐答案

如果您想要基于组合if p_id和active来创建唯一索引,您可以执行如下操作:

CREATE UNIQUE INDEX name_of_the_index
ON sales (p_id)
WHERE active = 1;

使用该索引,不能将具有相同p_id和active=1的两行插入到Sales表中.

点击此处查看文档:https://www.postgresql.org/docs/current/indexes-unique.html

Sql相关问答推荐

postgresql插入json不工作

SQL更新,在2个额外的表上使用内部连接

基于前面行的值:当x&>2时重复1,当连续3行x=0时则重复0

为什么在这种情况下我不能使用LAG函数?

SQL:如何查找聚合满足条件的连续日期

如何在SQL中更新Json字符串

Oracle 23c ROUND,数据类型为DATE

Select 最频繁的值以及分组依据

从每月生成的系列中生成每日汇率

在 SQL Server 中查找重复项

我可以在 T-SQL (SQL Server) 的函数内使用 OPTION 子句吗?

如何从三个连接表中获取数据,并始终显示第一个表中的数据,以及第三个表中的空值或现有记录?

有没有办法在雅典娜中将字符串转换为 int ?

基于字符串的SQL查询

String_Split 多列

Set vs let vs 在snowflake中声明变量

SQL Select 最大并获取列名

为每组填写行以进行旋转

当计数为 0 时显示行

Oracle SQL 查询自行运行,但在包装到select count(*) from ()时失败