har*_*oba 3 sql oracle oracle11g
想象一下,我在Oracle数据库中有一个包含3列ID(PK)NAME和/的表ACTIVE.例如,如果我想拥有NAME和ACTIVE独特在一起,我可以轻松地做到这一点.但是,我想要的NAME只有ACTIVE在该行设置为true 时才是唯一的(1).当ACTIVE为假(0)时,我希望能够拥有相同数量的行NAME(ID当然不同).这可能吗?
是的,在Oracle中,您可以使用CASE语句创建一个唯一索引,在您的情况下,类似于;
CREATE UNIQUE INDEX ix_uq ON test(
name,
CASE WHEN active = 0 THEN id ELSE 0 END
)
Run Code Online (Sandbox Code Playgroud)
由于id是唯一的,只要active = 0,我们可以拥有多个具有相同名称的行(因为唯一性将基于(name,id)),而活动条目将检查(name,0)上的唯一性每个名称只允许一个活动行.
一个要测试的SQLfiddle.尝试添加重复的活动条目,但不会插入.
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |