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

У меня есть таблица со столбцом ID (НОМЕР) и столбцом PARENT_ID (номер).При вставке новых данных новый идентификатор должен быть сгенерирован с использованием MAX(ID) + 1 ЕСЛИ результат [MAX (ID) + 1] не существует в другом столбце (PARENT_ID).

Таким образом, данные должны бытьв столбце ID должно быть первое наибольшее число из MAX (ID), которое недоступно в столбце PARENT_ID.

Я пытаюсь добиться этого без создания хранимой процедуры изэто (если возможно).

У меня есть запрос на выборку, который проверяет, присутствует ли следующий столбец с наибольшим номером столбца ID в столбце PARENT_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, т. е. 5 присутствует в PARENT_ID.Как я могу дополнить свой запрос, чтобы выполнить это?

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вы можете использовать выражение case, подобное этому

SELECT
  CASE WHEN MAX(ID)  > MAX(PARENT_ID) THEN MAX(ID) + 1
  ELSE MAX(PARENT_ID) + 1 
END as next_id
FROM CarteTable;
1 голос
/ 17 мая 2019

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

SELECT 
CASE 
    WHEN MAX(ID)+1 <= MAX(PARENT_ID) THEN MAX(PARENT_ID)+1
    ELSE MAX(ID)+1
END New_id
FROM your_table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...