数据库重复数据过滤

dotty_csdn 2018-10-25 10:29:06
一个表有a,b两个字段,b有生效和失效两个状态,要保证b为生效状态时,a字段唯一,有没有数据库解决方案,失效状态可能是多个,所以ab联合不是唯一的
...全文
195 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaaa_007 2018-11-09
  • 打赏
  • 举报
回复
数据量少
select * from table where a in (
select a from table where b='有效' group by a having count(*)=1);

数据量多,子查询建临时表
卖水果的net 2018-10-25
  • 打赏
  • 举报
回复

SQL> create table t(a int, b int);
Table created
SQL> create unique index iux_t_ab on t(decode(b, 0, null,a));
Index created
SQL> -- b = 0 时,a可以有重复值
SQL> insert into t values(100, 1);
1 row inserted
SQL> insert into t values(100, 0);
1 row inserted
SQL> insert into t values(100, 0);
1 row inserted
SQL> insert into t values(200, 1);
1 row inserted
SQL> insert into t values(200, 1);  -- 这行失败
insert into t values(200, 1)
ORA-00001: 违反唯一约束条件 (ORACLE.IUX_T_AB)
SQL> insert into t values(200, 0);
1 row inserted
SQL> select * from t;
   A    B
---- ----
 100    1
 100    0
 100    0
 200    1
 200    0
SQL> drop table t purge;
Table dropped

SQL> 

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧