oracle 当同一记录的一部分存在时停止重复

pxiryf3j  于 2023-06-22  发布在  Oracle
关注(0)|答案(2)|浏览(121)

我有一个名为注册表的表,我有几个列,对于这个例子,我只打算说明四(4)列:

  • r_id
  • 文件号
  • 文件名
  • 体积

现在这些列支持重复的filenumbers和filename,但是对于每个重复,需要有不同的卷。例如。

r_id              filenumber            filename             volume
1                  123                   test                  1
2                  123                   test                  2
3                  234                   oracle                1
4                  234                   oracle                2
5                  123                   test                  1

现在问题是r_id 5,它有一个重复的卷r_id 1
所以我的问题是我怎么能停止一个重复的卷时,一个记录与相同的文件号,文件名和卷存在?.
我使用常规的insert语句来创建记录

6tqwzwtp

6tqwzwtp1#

您可以在列filenumber, filename, volume上添加unique约束:

alter table table_name
add constraint fnumber_fname_vol_unique unique(filenumber, filename, volume);
omvjsjqw

omvjsjqw2#

如果你想防止重复插入,请参阅@Zakaria。如果你想确保唯一的体积值,你可以尝试:

insert into data(r_id, filenumber, filename, volume)
  select
    data_sequence.nextval as r_id,
    123 as filenumber,
    'test' as filename,
    coalesce((select max(volume) + 1 from data where filenumber = 123 and filename = 'test'), 1) as volume
   from dual
;

看看它的行动:SQL Fiddle。
如果需要调整/进一步详细说明,请予以说明。

相关问题