Использование SELECT из RETURNING при обновлении в PostgreSQL - PullRequest
1 голос
/ 14 марта 2020

У меня есть две таблицы T1, T2. Мне нужно добавить идентификатор столбца T1 в T2 и обновить значение в T1.

Так что я могу получить значения из T2 с помощью RETURNING, но при использовании значения в ОБНОВЛЕНИИ, ГДЕ тогда не удалось ОБНОВИТЬ столбец

Пример:

  WITH "T1S" AS (INSERT INTO "T1" VALUES()RETURNING id AS "T1id" ),
  "T2S" AS (INSERT INTO "T2"(t1_id) VALUES(
                                  (SELECT "T1id" FROM "T1S"))
                                  )RETURNING t1_id AS "T1id",t2_id AS "T2id"
                                  )
  UPDATE "T1" set value=t2_id WHERE id IN (SELECT t1_id FROM "T2S")

Изображение запроса

1 Ответ

0 голосов
/ 14 марта 2020

Если я правильно понимаю, это логи c, которые вы хотите:

WITH T1S AS (
      INSERT INTO "T1"
          VALUES ()
          RETURNING id AS T1id
     ),
     T2S AS (
      INSERT INTO "T2" (t1_id)
          SELECT T1ID
          FROM T1S
          RETURNING *
    )
UPDATE "T1" t1
    SET value = T2S.t2_id
    FROM T2S
    WHERE t1.id = T2S.t1_id;

Примечания:

  • Использование двойных кавычек для имен таблиц и столбцов плохо практика. Использование их для CTE и псевдонимов столбцов - абсурд. Они просто усложняют ссылки.
  • Решение состоит в том, что вы хотите соединить таблицу с CTE в конечном UPDATE.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...