Eri*_*ric 10 sql database oracle indexing
以下是包含3列的示例表(ID,UNIQUE_VALUE,UNIQUE_GROUP_ID)
我希望以下记录可以被允许:
(1, NULL, NULL)
(2, NULL, NULL)
Run Code Online (Sandbox Code Playgroud)
要么
(3, NULL, 7)
(4, 123, 7)
Run Code Online (Sandbox Code Playgroud)
或(注:此条件中不允许unique index
,也没有unique constraint
)
(5, NULL, 7)
(6, NULL, 7)
Run Code Online (Sandbox Code Playgroud)
这些是不允许的:
(7, 123, 7)
(8, 123, 7)
Run Code Online (Sandbox Code Playgroud)
我在最后2列创建了一个唯一索引,但只允许前两个示例.
是否可以让db只在两者都不为空时检查这两列的唯一性?
Jef*_*emp 23
你想只执行在哪里都行的唯一性UNIQUE_VALUE
和UNIQUE_GROUP_ID
不为空.为此,您可以使用基于函数的唯一索引:
CREATE UNIQUE INDEX func_based_index ON the_table
(CASE WHEN unique_value IS NOT NULL
AND unique_group_id IS NOT NULL
THEN UNIQUE_VALUE || ',' || UNIQUE_GROUP_ID
END);
Run Code Online (Sandbox Code Playgroud)