【发布时间】:2020-02-14 09:31:32
【问题描述】:
我正在学校里用 java/postgresql 做一个项目,在那里你可以购买不同音乐会的门票,但我被困在一个地方,我想编写一个代码,以便在音乐会被取消时退还所有款项.
我想从我的用户那里删除门票,并以他们购买门票的价格退还他们。
我写了这个,但它只返回用户第一张票的比塞塔。
WITH tic AS (
SELECT userid, price, ticketamount
FROM piljetter_system.soldtickets tic
WHERE consertid = 2 // is example number
)
UPDATE piljetter_system.users usr SET pesetas = pesetas + (tic.price * tic.ticketamount)
FROM tic
WHERE usr.userid = tic.userid;
当我这样做时:
SELECT * FROM tic;
在这里您可以看到 userid=5 两次购买了 consertid=2 的门票,一次他以 425 的价格购买了 5 张门票,另一次他以 200 的价格购买了同一个 consertid 的门票,3 张门票。 我上面的当前脚本仅将用户第一次购买的钱(5 * 425 比塞塔)退还给用户,我需要退还所有门票。
我也一直这样尝试,结果一样,只是更新了一行。:
UPDATE piljetter_system.users allusr
SET pesetas = (tic.price * tic.ticketamount) + allusr.pesetas
FROM piljetter_system.soldtickets tic , piljetter_system.users usr
WHERE tic.userid = allusr.userid
AND tic.consertid=2;
感谢您的帮助! :)
【问题讨论】:
标签: sql postgresql