Обновление записи в БД на основе родительского идентификатора и минимального значения

#sql #sql-server #sql-update

#sql #sql-сервер #sql-обновление

Вопрос:

У меня есть такая таблица.

 ID | ParentId | Level | LevelStatus
1       1         5         NULL
2       1         6         NULL
3       2         4         NULL
4       2         2         NULL
5       3         2         NULL
 

Мне нужно обновить столбец LevelStatus значением 1 для каждого минимального уровня родительского идентификатора. Например, самым низким уровнем для родительского идентификатора 1 является уровень 5, поэтому он должен обновлять только эту запись, для родительского идентификатора 2 он должен обновлять запись, где уровень равен 2.

Я знаю, как выбрать правильные записи. Что-то вроде этого:

 SELECT DISTINCT ParentId, MIN(Level) AS MinLevel
FROM TableA
GROUP BY ParentId
 

Но не знаю, как использовать его для написания инструкции update.

Комментарии:

1. Пометьте свой вопрос базой данных, которую вы используете.

2. Не сохраняйте значения в зависимости от других табличных данных, это приведет только к несогласованности данных. Вместо этого создайте представление.

Ответ №1:

Вы можете использовать коррелированный подзапрос:

 update tablea
    set levelstatus = 1
    where level = (select min(a2.level)
                   from tablea a2
                   where a2.parentid = a.parentid
                  );
 

Это стандартный синтаксис SQL и должен работать в любой базе данных … кроме MySQL и MariaDB.