Как создать новое значение для одного столбца в зависимости от того, доступно ли оно уже в другом столбце?

У меня есть таблица с колонкой 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 ответа

Автоматический диспенсер мыльной пены от xiaomi.


Попробуй это-

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;

Есть идеи?

10000