带查询的 PostgreSQL

PostgreSQL WITH query

这是manual里面写的:

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

外部 SELECT 将 return 更新操作前的原始价格,而

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

外部 SELECT 将 return 更新数据。


我的问题是....如果我想要一个显示更新前后数据差异的列怎么办? 例如,如果它是 5,则更改为 6。我想看1。 为此,我需要之前和之后的价格栏。 类似于:

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

None 上面的例子展示了如何做到这一点。 我知道这可以通过其他方式解决,但我想知道是否可以使用 WITH 语句来解决。

你可以加入他们:

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;