1

我有两个表 T1,T2 我必须在 T2 中添加 T1 的列 id 并更新 T1 中的值。

所以我可以使用 RETURNING 从 T2 获取值,但是当在 UPDATE WHERE 中使用值时,无法更新列

例子:

  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")

查询图片

4

1 回答 1

0

如果我理解正确,这就是您想要的逻辑:

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
于 2020-03-14T11:58:21.837 回答