DB2查询以获取表中的下一个可用编号

时间:2013-02-01 17:42:38

标签: sql db2

我有一个包含少量列的表,我想使用DB2查询实现以下功能。 说例如USR表具有用户ID列和选项ID列

USER ID         OPTION ID
1               1
1               5
1               22
1               100    
1               999

我想写一个查询,结果应该是顺序的下一个可用数字。

因此,当第一次执行查询时,它应该返回下一个 可用选项ID为2,因此用户将输入#2,因此DB现在具有

USER ID  OPTION ID
1         1  
1         2  
1         5  
1        22  
1        100      
1        999  

所以现在当执行查询时,它会显示我的可用选项ID为3。 有人可以帮助获得优化的查询以获得正确的结果吗?

1 个答案:

答案 0 :(得分:3)

请注意,我认为向用户公开option_id是一个糟糕的想法,业务要求或没有。像这样的代理ID对于最终用户来说是完全隐藏的('自然键,如信用卡号码,显然必须暴露,但仍然不应该被指示以这个方式)。
以下内容适用于任何版本的DB2:

SELECT a.optionid + :nextIncrement as next_value                     
FROM Usr as a                          
LEFT JOIN Usr as b                
       ON b.userid = a.userid                 
          AND b.optionid = a.optionid + :nextIncrement        
WHERE a.userid = :userId      
      AND b.userid IS NULL               
ORDER BY a.optionid ASC
FETCH FIRST 1 ROW ONLY        

(对我的iSeries实例上的本地表运行语句,替换主机变量)

同样,我强烈建议您使用此功能,并查看有关更改业务要求的信息。