postgresql 在使用 CTE 后不会在 select * 上返回值

问题描述 投票:0回答:1

我尝试创建一个新用户,并将新用户 ID 与他们的 google ID 一起推送到身份验证表。

然后我想返回新用户,但即使我使用 select * 也没有返回任何值。 (但是用户被创建,并且 auth 表中的 auth 行也被创建)

这是查询:

WITH returned_user_id AS (
    INSERT INTO users (display_name, avatar)
    VALUES ('AAA', 'AAA')
    RETURNING id
),
    inserted_auth AS (
        INSERT INTO auth (user_id, google_id)
        SELECT id, '31231231'
        FROM returned_user_id
    )
SELECT *
FROM users
WHERE id = (SELECT user_id FROM auth WHERE google_id = '31231231');

这是我在后端使用它的方式:

   //CREATE NEW ACCOUNT
  async create(googleProfile:GoogleProfile):Promise<DataSingle>{
      const {googleId, displayName, avatar} = googleProfile

      try {
          const {rows} = await pool.query(`


         WITH returned_user_id AS (
        INSERT INTO users (display_name, avatar)
        VALUES ($1, $2) 
        RETURNING id
    ),
        inserted_auth AS (
        INSERT INTO auth (user_id, google_id) 
        SELECT id, $3
        FROM returned_user_id
        )
    SELECT *
    FROM users
    WHERE id = (SELECT user_id FROM auth WHERE google_id = $3);

    `, [displayName, avatar, googleId])

      return {
          data: snakeToCamel(rows)[0],
          error:null,
          status: 201
      };
  }catch (err){
      console.error(err)
      return {
          data: null,
          error: "Could not create the user",
          status: 400
      };
  }

},

sql node.js postgresql express pg
1个回答
0
投票

尝试

WITH returned_user_id AS (
    INSERT INTO users (display_name, avatar)
    VALUES ('AAA', 'AAA')
    RETURNING id
),
    inserted_auth AS (
        INSERT INTO auth (user_id, google_id)
        SELECT id, '31231231'
        FROM returned_user_id
       RETURNING user_id
    )
select user_id from inserted_auth
  ;
© www.soinside.com 2019 - 2024. All rights reserved.