带查询的 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;
这是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;