sql - 将四个表列限制为 Firebird DBMS 中的不同值

标签 sql database validation firebird

我有一个包含 4 个唯一列的表

我试过这样的东西:

ALTER TABLE "FolderDsg" ADD CONSTRAINT CHK4_FOLDERDSG CHECK (ORDER2 = ORDER3) 
ALTER TABLE "FolderDsg" ADD CONSTRAINT CHK11_FOLDERDSG CHECK (ORDER1 not in (ORDER2)) 
ALTER TABLE "FolderDsg" ADD CONSTRAINT CHK13_FOLDERDSG CHECK (ORDER1 like (ORDER2)) 
/******************************************************************************/ 
/*                             Unique Constraints                             */ 
/******************************************************************************/ 
ALTER TABLE "FolderDsg" ADD CONSTRAINT UNQ1_FOLDERDSG UNIQUE (ORDER1) 
USING INDEX "_IDXORDER1" 

它适用于每一列。但是我怎样才能为所有 4 列创建一个唯一的呢?

+------+------+------+------+
|Order1|Order2|Order3|Order4| 
+------+------+------+------+
|1     |2     |3     |4     | = valid OK Check
+------+------+------+------+
|5     |5     |6     |7     | = not valid ( That works in the Database ) 
+------+------+------+------+
|8     |9     |10    |11    | = valid OK Check 
+------+------+------+------+
|12    |13    |9     |14    | = valid  ( That's the Problem ) I need a not valid 
+------+------+------+------+

最佳答案

你试过吗?

ALTER TABLE "FolderDsg" ADD CONSTRAINT CHECK (ORDER1 not in (ORDER2, ORDER3, ORDER4) and
                                              ORDER2 not in (ORDER3, ORDER4) and
                                              ORDER3 not in (ORDER4)
                                             );

编辑:

如果您还希望列中的值是唯一的,您可以添加四个唯一约束:

ALTER TABLE "FolderDsg" ADD CONSTRAINT UNIQUE (ORDER1);
ALTER TABLE "FolderDsg" ADD CONSTRAINT UNIQUE (ORDER2);
ALTER TABLE "FolderDsg" ADD CONSTRAINT UNIQUE (ORDER3);
ALTER TABLE "FolderDsg" ADD CONSTRAINT UNIQUE (ORDER4);

编辑二;

而且,如果您真的希望所有列中的所有值都不同,您有两种选择。第一种是使用 before update/before insert 触发器。第二种更可取:以规范化格式存储数据。

创建一个表,每个“FolderDsg”和订单各占一行:

create table FolderDsgOrder (
    FolderDsgId int,
    OrderNum int,
    OrderValue int
    /* whatever else you want goes here */
);

现在您可以创建简单的约束:

alter table FolderDsgOrder add constraint unique (OrderValue);

关于sql - 将四个表列限制为 Firebird DBMS 中的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222775/

相关文章:

validation - Codeigniter 自定义表单验证

SQL DISTINCT 不会删除重复项

Mysql NOT IN 子句查询不返回我想要的

sql - 在不知道下一个字符的情况下替换值中的文本

sql - 如何提高 Oracle DB 中 SQL 查询的性能

jquery - 负一 (-1) 通过 jQuery Validate 插件中的验证。使固定?

mysql - 查找候选键/ super 键

database - 如何比较 PostgreSQL JSONB 中的数字

database - Oracle 索引何时以及为何失效?

Spring 验证器