Oracle:为其他两列的唯一组合添加增量ID

时间:2012-10-02 21:25:43

标签: sql oracle escaping

我有一张看起来像这样的表

Seq ID | Uid | Type | URL
每个Uid

对于任何给定类型,我可以有多个Urls,例如

Uid 123可以有5 video urls6 image type urls

我想为UidType的每个组合插入自动递增的seq id,因此在前面的示例中,id的seq uid 123和类型视频将转到{对于每个1,2,3,4,5,每个video url1,2,3,4,5,6都有{1}},所有其他image type urluid组合都相同。

2 个答案:

答案 0 :(得分:4)

我不会试图在数据库中存储这种人工构造。如果需要,可以在查询时生成:

SELECT Uid, Type, URL,
       ROW_NUMBER() OVER(PARTITION BY Uid, Type ORDER BY URL) AS SeqID
    FROM YourTable

答案 1 :(得分:0)

您可以在查询中执行此操作吗?

select row_number() over (partition by uid, type order by url) as seqID, . . .
from table

您还可以在更新中执行此操作,以进行事后更新:

with toupdate as (
     select row_number() over (partition by uid, type order by url) as newseqID, . . .
     from table
)
update toudpate
    set seqID as newseqID

如果要将其作为插入的一部分,则需要创建一个触发器来维护列值。