【问题标题】:Using a single WITH multiple times in postgresql query在 postgresql 查询中多次使用单个 WITH
【发布时间】:2015-05-27 15:58:58
【问题描述】:

如何多次使用我的第一个 with 语句? 使用下面这样的代码,除了紧随其后的语句之外,我不能将其用于任何其他语句。

WITH insertuser AS (

    INSERT INTO 
    zorro.user (username, firstname, lastname,
        accountstatus, roles, creationdatetime)
    VALUES('test', 'test', 'test',
        'test', 'test', current_timestamp)
    RETURNING id
    )

INSERT INTO
zorro.email (address, confirmed, count, user_id)
SELECT 'test', false, 1, id
FROM insertuser;

INSERT INTO
zorro.password (hash, count, user_id)
SELECT 'test', 1, id
FROM insertuser;

INSERT INTO
zorro.phone_number (number, confirmed, count, user_id)
SELECT 'test', false, 1, id
FROM insertuser;

INSERT INTO
zorro.Question (text, answer, count, user_id)
SELECT 'test', 'test', 1, id
FROM insertuser;

我在代码中的第二个“FROM insertuser”附近的第 19 行遇到 sql 错误。

【问题讨论】:

  • 抛出什么错误?
  • 公用表表达式只对一个查询有效。
  • 您可以将结果保存到临时表中,然后重新使用临时表。

标签: sql postgresql common-table-expression


【解决方案1】:

我认为你可以使用一系列常用的表表达式:

WITH insertuser AS (
    INSERT INTO zorro.user (username, firstname, lastname, accountstatus, roles, creationdatetime)
        VALUES('test', 'test', 'test', 'test', 'test', current_timestamp)
     RETURNING id
    ),
    em as (
     INSERT INTO zorro.email (address, confirmed, count, user_id)
         SELECT 'test', false, 1, id
         FROM insertuser
     RETURNING *
    ),
    p as (
     INSERT INTO zorro.password (hash, count, user_id)
         SELECT 'test', 1, id
         FROM insertuser
     RETURNING *
    ),
    pn as (
     INSERT INTO zorro.phone_number (number, confirmed, count, user_id)
         SELECT 'test', false, 1, id
         FROM insertuser
     RETURNING *
   )
INSERT INTO zorro.Question (text, answer, count, user_id)
    SELECT 'test', 'test', 1, id
    FROM insertuser;

我不能 100% 确定 CTE 是否需要 RETURNING 子句。

【讨论】:

  • 谢谢。顺便说一句,不需要下一个 RETURNING 子句。
  • @user3550283 你能让这个东西工作吗?我仍然面临问题。
  • @GauriShankarBadola 。 . .你或许应该问自己的问题。
  • @GordonLinoff 实际上我是,然后所以建议我这样做。我有同样的问题,这对我不起作用。 :(
猜你喜欢
  • 2016-09-10
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多