首页 > 解决方案 > Postgresql,对于表循环中的每个用户标识插入 x 次

问题描述

我不知道如何从 WITH 表中插入 x 次。我想为他们获得的每张票插入一张优惠券。我想要做的是:

WITH tic AS (
   SELECT userid,
        sum(price * ticketamount) AS total_price,
        sum(ticketamount) As amount_of_tickets
   FROM piljetter_system.soldtickets tic
   WHERE consertid = 7
   GROUP BY userid
)
UPDATE piljetter_system.users usr
   SET pesetas = pesetas + tic.total_price
FROM tic
WHERE usr.userid = tic.userid;

对于 tic 中的每个 userId,请在以下时间插入 amount_of_tickets。就像每个用户标识的循环一样,插入 x 次。

INSERT INTO piljetter_system.coupons (tic.userid)

默认情况下,每张优惠券都会获得一个唯一编号。

我很感谢你能帮助我。

编辑:这是我可以用 generate_series() 做的事情吗?

标签: sqlpostgresql

解决方案


因此,我将您的两个答案混合在一起,以便能够做我想做的事情。这是适合我的完整版本。

WITH tic AS (
   SELECT userid,
        sum(price * ticketamount) AS total_price,
        sum(ticketamount) As amount_of_tickets
   FROM piljetter_system.soldtickets tic
   WHERE consertid = consertidi
   GROUP BY userid
),updated_tics AS (
UPDATE piljetter_system.users usr
   SET pesetas = pesetas + tic.total_price
    FROM tic
    WHERE usr.userid = tic.userid
RETURNING usr.userid, tic.amount_of_tickets)
    INSERT INTO piljetter_system.coupons (userid)
   SELECT updated_tics.userid
   FROM updated_tics CROSS JOIN LATERAL
        generate_series(1, updated_tics.amount_of_tickets) gs(n);

推荐阅读