sql - 如果另一列为空,则两列是唯一的
问题描述
[甲骨文SQL]
如果其他列(id3)为空,是否可以为两列(id1,id2)创建唯一约束?
ALTER TABLE t ADD CONSTRAINT u_t UNIQUE (id1, id2);
如果没有,我还有什么其他方法可以解决这个问题?
谢谢,
解决方案
您可以使用基于函数的唯一索引。在为空CASE
时返回 GUID 。id3
如果不是分别返回id1
or的实际值id2
。
唯一的问题是,CASE
分支中的类型必须兼容。这就是我在这里将它们转换为字符的原因。也许你可以用不同的方式来做这件事,这取决于数据类型id1
和类型id2
。
CREATE UNIQUE INDEX i_t_id3_nn_id1_id2
ON t
(CASE
WHEN id3 IS NULL THEN
to_char(id1)
ELSE
rawtohex(sys_guid())
END,
CASE
WHEN id3 IS NULL THEN
to_char(id2)
ELSE
rawtohex(sys_guid())
END);
当然,另一种选择是触发器。但是 index 方法虽然有点难看,但可能是性能更高的方法。
推荐阅读
- python-3.x - 使用 Cython 和外部多线程 C 库时的未定义行为
- android - 如何让安卓应用只运行后台服务,不能启动?
- javascript - 通过谷歌表格发送电子邮件的谷歌脚本冗余措施失败
- c++ - 在 C++ 中复制 __PRETTY_FUNCTION__ 的行为
- mysql - 跨多个表优化 INNER JOIN
- c# - IIS 如何知道如何启动 .NET Web 应用程序
- c# - 从 Azure Function .Net 调用没有 DNS 条目的 URL
- python - ImportError:无法导入名称“阶乘”
- c# - 为什么在特定环境下认证过程中调用 api token 会失败?(400 错误)
- excel - VBA 提取两个字符之间的字符串