我有一个带有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。我该如何扩充查询以完成此任务?
答案 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;