如何根据一列中是否已有新值来为其生成新值?

时间:2019-05-17 10:09:13

标签: sql oracle

我有一个带有ID列(NUMBER)和PARENT_ID列(number)的表。插入新数据时,如果结果[MAX(ID)+1]不存在于另一列(MAX(ID) + 1)中,则必须使用PARENT_ID生成新ID。

因此要插入到ID列中的数据必须是PARENT_ID列中不可用的MAX(ID)中的第一个大数字。

我正在尝试在不使用存储过程的情况下实现这一目标(如果可能的话)。

到目前为止,我所使用的选择查询检查PARENT_ID列中是否存在ID列的下一个最大数目,如果没有,则返回该数目。

但是,我不确定如何扩展查询以包含MAX(ID) + 1中存在PARENT_ID的情况。如何检查下一个最大值?

这是我到目前为止的查询:

SELECT
    CASE 
       WHEN MAX(ID) + 1 NOT IN (SELECT DISTCINT PARENT_ID FROM CarteTable) 
          THEN MAX(ID) + 1
    END
FROM CarteTable;

这是我的桌子:

ID         PARENT_ID
--------------------
1              2
2              3
4              5

在这种情况下,我的查询不返回任何内容。

运行查询时,我需要它返回6(因为MAX(ID)+ 1),即PARENT_ID中存在5。我该如何扩充查询以完成此任务?

2 个答案:

答案 0 :(得分:1)

试试这个-

SELECT 
CASE 
    WHEN MAX(ID)+1 <= MAX(PARENT_ID) THEN MAX(PARENT_ID)+1
    ELSE MAX(ID)+1
END New_id
FROM your_table

答案 1 :(得分:1)

您可以使用这样的case表达式

SELECT
  CASE WHEN MAX(ID)  > MAX(PARENT_ID) THEN MAX(ID) + 1
  ELSE MAX(PARENT_ID) + 1 
END as next_id
FROM CarteTable;