gpt4 book ai didi

SQL:列为特定值时的唯一约束

转载 作者:行者123 更新时间:2023-11-29 11:08:53 25 4
gpt4 key购买 nike

CREATE TABLE foo (
dt AS DATE NOT NULL,
type AS TEXT NOT NULL,
CONSTRAINT unique_dt_type UNIQUE(dt,type) -- check constraint(?)
)

当仅存在特定条件时,试图想出正确的语法来创建唯一约束时,脑子有点笨。

给定,type可以有值A-F,每个日期只能有一个A,但可以有多个B-F 。好表的例子:

2010-01-02 | 'A'  -- only one
2010-01-02 | 'B' -- can have multiple
2010-01-02 | 'B'
2010-01-02 | 'B'
2010-01-02 | 'C' -- can have multiple
2013-01-02 | 'A' -- only one
2010-01-02 | 'B' -- can have multiple
2010-01-02 | 'B'
2013-01-02 | 'F' -- can have multiple
2013-01-02 | 'F'

尝试阅读 check/unique syntax 但没有任何示例。 CHECK 接近但仅将其限制在一个范围内并且未与 UNIQUE 场景结合使用。也尝试过搜索,但我的搜索能力不是很理想,就是没有类似的问题。

最佳答案

PostgreSQL 可以通过其“部分索引”功能满足您的需求。实际上,这是通过向创建索引语句添加一个 where 子句来实现的。

示例:

CREATE INDEX my_partial_ix ON my_sample_table (my_sample_field)
WHERE (my_sample_field = 'rows to index');

看这里: http://www.postgresql.org/docs/current/interactive/indexes-partial.html

请特别注意 示例 11-3 部分。设置部分唯一索引。它提供的示例非常符合您的既定目标。

CREATE UNIQUE INDEX my_partial_ix ON my_sample_table (my_sample_field)
WHERE NOT (my_sample_field = 'duplicates ok');

关于SQL:列为特定值时的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15888711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com