2

我有一个包含几列的表,我想使用 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。有人可以帮助获得优化的查询以获得正确的结果吗?

4

1 回答 1

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 实例上的本地表运行的语句,替换了主机变量)

同样,我强烈建议您不要使用它,并了解如何更改业务需求。

于 2013-02-01T21:28:08.257 回答