简体   繁体   中英

PostgreSQL WITH query

This is what is written in the manual :

WITH t AS (
    UPDATE products SET price = price * 1.05
    RETURNING *
)
SELECT * FROM products;

the outer SELECT would return the original prices before the action of the UPDATE, while in

WITH t AS (
    UPDATE products SET price = price * 1.05
    RETURNING *
)
SELECT * FROM t;

the outer SELECT would return the updated data.


My question is.... What if I want to have a column that shows the diffrance between the before and after update data? for example if it was 5 then changed to 6 . I want to see 1 . in order to do that I need price column before and after. Something like:

WITH t AS (
    UPDATE products SET price = price * 1.05
    RETURNING *
)
SELECT *,new.price-old.price FROM ?;

None of the examples above shows how to do it. I know this can be solved with other ways but I want to know if it's possible to do it with WITH statment.

You can join them together:

WITH t AS (
    UPDATE products SET price = price * 1.05
    RETURNING *
)
SELECT p.*, t.price, (t.price - old.price) as diff
FROM products p JOIN
     t
     ON p.productid = t.productid;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM