【问题标题】:Postgres SQL: How to create a constraint to check an element is not in an array of stringPostgresql:如何创建约束以检查元素不在字符串数组中
【发布时间】:2021-03-08 22:34:13
【问题描述】:

我正在学习约束,但我还没有找到检查值是否在数组中的方法。

这是我的问题:

Citytext
Other_citiestext 的数组

我想说那个城市一定不同于其他城市。 我想看看其他城市都不同

ALTER TABLE address 
            ADD CONSTRAINT  "check cities are different"
            CHECK (
            City <> Other_cities
            );

我猜这段代码是错误的,因为它没有逐一检查其他城市。

我该怎么办?

【问题讨论】:

  • 能否请您包含address 的架构?你需要使用数组吗?通常这将通过连接表和唯一约束来完成。

标签: arrays postgresql constraints


【解决方案1】:

使用any 检查元素是否在数组中。

test=> select not 'Moose Factory' = any( array['Moose Factory', 'Walla Walla'] );
 ?column? 
----------
 f
(1 row)

【讨论】:

    【解决方案2】:

    您可以检查city 是否与other_cities 中的所有值不同:

    ALTER TABLE address ADD CHECK ((city <> ALL (other_cities)) IS TRUE);
    

    IS TRUE 将处理数组中的 NULL 值。没有它,约束将传递包含 NULL 值的数组,因为检查约束允许测试评估为 NULL 的行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 2021-10-15
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      相关资源
      最近更新 更多