Как использовать запрос на обновление в PostgreSQL
В PostgreSQL запрос UPDATE используется с помощью предложения SET для обновления/изменения записи таблицы. В PostgreSQL различные предложения, такие как WHERE, RETURNING и т. д., могут использоваться с запросом UPDATE для достижения различных функций. Предложение WHERE используется с командой UPDATE для изменения записи определенной строки. В предложении WHERE вы можете указать несколько условий с помощью операторов AND и OR. В PostgreSQL пропуск предложения WHERE приведет к обновлению всей таблицы.
Этот пост объяснит работу запроса Postgres UPDATE на нескольких примерах. Итак, начнем!
Как использовать запрос на обновление в PostgreSQL?
Давайте рассмотрим следующий синтаксис, чтобы получить общее представление о запросе UPDATE в PostgreSQL.
ОБНОВЛЕНИЕ tab_name УСТАНОВИТЬ столбец_1 = значение_1, столбец_2 = значение_2, ... столбец_N = значение_N ГДЕ состояние;
Рассмотрим нижеперечисленные пункты для анализа работы UPDATE запрос:
● Введите ключевое слово UPDATE , за которым следует имя таблицы, чтобы обновить запись таблицы. В приведенном выше фрагменте tab_name представляет таблицу, которую нужно обновить.
● Предложение SET принимает пары «столбец-значение», разделенные запятыми. Укажите имена столбцов и их обновленные значения.
● В приведенном выше фрагменте col_1, col_2, …, col_N — это столбцы, которые необходимо обновить, а val_1, val_2, …, val_N — их соответствующие значения.
● ГДЕ 9Предложение 0004 принимает условие, на основании которого выбранная таблица будет обновлена.
Пример: Как обновить одну строку в PostgreSQL?
У нас есть существующая таблица с именем «team_members». Мы будем использовать запрос UPDATE для обновления определенной строки таблицы «team_members».
Шаг 1: Получите сведения о таблице с помощью запроса SELECT
Давайте запустим запрос SELECT , чтобы увидеть все данные выбранной таблицы:
SELECT * FROM team_members;
Шаг 2: Обновите выбранную строку с помощью запроса UPDATE
Предположим, мы хотим изменить имя игрока с «Пол» на «Марш». Для этого выполните приведенную ниже команду:
UPDATE team_members SET имя_игрока = 'Болото' ГДЕ player_id = 5;
Пошагово разберем работу вышеприведенного запроса:
— team_members — обновляемая таблица.
— Марш — это значение, которое нужно обновить в столбце player_name.
— Обновленное значение будет присвоено игроку, у которого player_id = 5.
Безошибочный вывод подтверждает успешное выполнение запроса UPDATE.
Шаг 3: Проверка обновленной строки с помощью команды выбора
Давайте запустим приведенную ниже команду, чтобы проверить, была ли обновлена выбранная строка:
SELECT * FROM team_members;
Вышеприведенный фрагмент подтвердил, что целевая строка была успешно обновлена.
Предложение RETURNING в запросе Postgres UPDATE
В PostgreSQL запрос UPDATE может принимать необязательное предложение с именем RETURNING , которое используется для возврата обновленных строк. Синтаксис запроса UPDATE с предложением RETURNING будет выглядеть следующим образом:
UPDATE tab_name УСТАНОВИТЬ столбец_1 = значение_1, столбец_2 = значение_2, . .. ГДЕ условие ВОЗВРАЩЕНИЕ *;
RETURNING * Предложение вернет обновленные строки.
Пример. Как использовать предложение RETURNING с запросом UPDATE в PostgreSQL?
Предположим, мы хотим обновить и вернуть player_name с идентификатором 8. Для этого давайте выполним запрос UPDATE вместе с предложением
UPDATE team_members SET player_name = 'Джо' ГДЕ player_id = 8 ВОЗВРАЩЕНИЕ *;
Вывод поясняет, что предложение RETURNING успешно вернуло обновленную строку.
Заключение
PostgreSQL позволяет нам обновить запись любой существующей таблицы с помощью запроса UPDATE . В PostgreSQL различные предложения, такие как WHERE, RETURNING и т. д., могут использоваться с запросом UPDATE для различных целей. Предложение WHERE принимает условие, на основании которого выбранная таблица будет обновлена. В то время как предложение RETURNING возвращает обновленную запись. Этот пост объяснил несколько вариантов использования UPDATE запрос с помощью примеров.
postgresql — Обновление значения столбца с помощью соединения с подвыбором в той же таблице
Задавать вопрос
спросил
Изменено 3 месяца назад
Просмотрено 931 раз
Таблица BillOfQuantitiy
имеет индекс уровня и boqitemname, sitename и многое другое. Визуализация данных выглядит следующим образом:
|Указатель уровня | Название предмета Boq | Имя сайта| |---------------|----------------|----------| |1. 1.1 | Зажим | | |1.1.1.1 | Ручной зажим | | |1.1.1.2 | Дверной зажим | | |1.1.2 | Переключатели | | |1.1.2.1 | Двухпозиционный переключатель| |
и так далее
Ожидаемый результат:
|Индекс уровня | Название предмета Boq | Имя сайта| |---------------|----------------|----------| |1.1.1 | Зажим | Зажим | |1.1.1.1 | Ручной зажим | Зажим | |1.1.1.2 | Дверной зажим | Зажим | |1.1.2 | Переключатели | Переключатели | |1.1.2.1 | Двухпозиционный переключатель| Переключатели |
Мне нужно обновить имя сайта
до индекса родительского уровня BoqItemname
, т.е. для 1.1.1.1 индекс родительского уровня равен 1.1.1, BoqItemname
— это Зажим
.
То же самое для 1.1.1.2. Для 1.1.2.1 имя сайта будет Switches
. Я решил построить запрос следующим образом:
выбрать все родительские элементы a
выбрать все дочерние элементы b
Внутреннее соединение этих двух на основе a. levelindex = substring(b.levelindex,1,length(a.levelindex))
выбор levelindex, lblindex, boqitemname, substring(b.levelindex,1,length(a.levelindex) в качестве выгоды от вышеуказанного внутреннего соединения
Обновление имени сайта, где levelindex=benev и lblindex ==boqtable.levelindex
обновить спецификацию btt установить имя_сайта=fin.boqitemname от( выберите levelindex,boqitemname, lblindex, substring(lblindex,1,lenght(levelindex)) как выгоду от( выберите из ( выберите levelindex, boqitemname из billofquantity, где productno='' и levelindex!='' и length(levelindex)>2) a присоединиться( выбрать отдельный levelindex lblindex из billofquantity, где boqitemid!='' и levelindex!='' и length(levelindex)>2 ) b на a.levelindex = подстрока (b.lblindex, 1, длина (a.levelindex) ) как фу где foo.
Когда я делаю выбор внутри обновления, он показывает, что levelindex, boqitemname, lblindex и benev
, где levelindex
и benev
будут одинаковыми. Следовательно, я хочу отфильтровать обновление для тех же столбцов с одинаковыми значениями, а также для lblindex, равного индексу уровня таблицы обновления.
Это показывает, что обновление произошло, но имя сайта остается нулевым. Запрос не обновляется может быть из-за того, что выбор и обновление происходят в одной и той же таблице?
- postgresql
- обновление
6
Вы можете использовать коррелированный подзапрос следующим образом:
ОБНОВЛЕНИЕ BillOfQuantity AS tgt НАБОР Название сайта = ( ВЫБИРАТЬ src.BoqItemName ОТ BillOfQuantity AS источник ГДЕ tgt.