我有一个包含少量列的表,我想使用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。 有人可以帮助获得优化的查询以获得正确的结果吗?
答案 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实例上的本地表运行语句,替换主机变量)
同样,我强烈建议您不使用此功能,并查看有关更改业务要求的信息。