У меня есть таблица с колонкой ID (NUMBER) и колонкой PARENT_ID (число). При вставке новых данных новый идентификатор должен быть создан с использованием MAX (ID) + 1, ЕСЛИ результат [MAX (ID) + 1] не существует в другом столбце (PARENT_ID).
Таким образом, данные, которые должны быть вставлены в столбец идентификатора, должны быть первым наибольшим числом из MAX (ID), которое недоступно в столбце PARENT_ID. Я пытаюсь достичь этого, не делая из этого хранимую процедуру (если это возможно).
У меня есть запрос на выборку, который проверяет наличие следующего наибольшего числа в столбце идентификатора в столбце PARENT_ID и возвращает его, если его нет. Однако я не уверен, как дополнить запрос, чтобы включить сценарий, в котором MAX (ID) + 1 присутствует в PARENT_ID. Как я проверяю следующее наибольшее значение?
Это запрос, который я имею до сих пор:
SELECT
CASE WHEN MAX(ID)+1 NOT IN (select distinct PARENT_ID from CarteTable) THEN MAX(ID)+1
END
FROM CarteTable;
Это мой стол:
ID PARENT_ID
--------------------
1 2
2 3
4 5
Мой запрос ничего не возвращает в этом случае.
Когда я запускаю запрос, мне нужно, чтобы он возвращал 6 как MAX (ID) + 1, т. Е. 5 присутствует в PARENT_ID. Как я могу дополнить свой запрос, чтобы выполнить это?
Всего 2 ответа
Попробуй это-
SELECT
CASE
WHEN MAX(ID)+1 <= MAX(PARENT_ID) THEN MAX(PARENT_ID)+1
ELSE MAX(ID)+1
END New_id
FROM your_table
Вы можете использовать выражение case, как это
SELECT
CASE WHEN MAX(ID) > MAX(PARENT_ID) THEN MAX(ID) + 1
ELSE MAX(PARENT_ID) + 1
END as next_id
FROM CarteTable;