Sql

Update select from postgresql: PostgreSQL : Документация: 9.5: UPDATE : Компания Postgres Professional

Как использовать запрос на обновление в 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 вместе с предложением

RETURNING :

 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

. Я решил построить запрос следующим образом:

  1. выбрать все родительские элементы a

  2. выбрать все дочерние элементы b

  3. Внутреннее соединение этих двух на основе a. levelindex = substring(b.levelindex,1,length(a.levelindex))

  4. выбор levelindex, lblindex, boqitemname, substring(b.levelindex,1,length(a.levelindex) в качестве выгоды от вышеуказанного внутреннего соединения

  5. Обновление имени сайта, где 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=substring(foo.lblindex,1,length(foo.levelindex)) ) как fin, где fin.levelindex = fin.benev и fin.lblindex = btt.levelindex

Когда я делаю выбор внутри обновления, он показывает, что levelindex, boqitemname, lblindex и benev , где levelindex и benev будут одинаковыми. Следовательно, я хочу отфильтровать обновление для тех же столбцов с одинаковыми значениями, а также для lblindex, равного индексу уровня таблицы обновления.

Это показывает, что обновление произошло, но имя сайта остается нулевым. Запрос не обновляется может быть из-за того, что выбор и обновление происходят в одной и той же таблице?

  • postgresql
  • обновление

6

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

 ОБНОВЛЕНИЕ
 BillOfQuantity AS tgt
НАБОР
 Название сайта =
 (
 ВЫБИРАТЬ
 src.BoqItemName
 ОТ
 BillOfQuantity AS источник
 ГДЕ
 tgt.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *