gpt4 book ai didi

sql - 请愿书有条件更新

转载 作者:行者123 更新时间:2023-11-29 13:33:02 25 4
gpt4 key购买 nike

我需要用这个逻辑更新一个表:查找过滤字段='some value'的行,我们称之为“选定行”,然后更新“选定行”本身和订单字段所在的行> 所选行顺序字段的:

例如,我想增加所有具有“选定行”价格值和相同 id_product 的价格值的行,其中“选定行”的距离值 = 到 7 所以选定行是 *,已更新的行应该是^

mytableid | price | id_product | distance1  |  10   |   1        |  1        2  |  04   |   1        |  2 3  |  02   |   1        |  12 4  |  44   |   1        |  2   ^5  |  09   |   1        |  1 6  |  13   |   1        |  7 * ^7  |  15   |   1        |  8   ^8  |  09   |   2        |  5 9  |  12   |   2        |  810 |  17   |   2        |  1  11 |  32   |   2        | 13  12 |  22   |   2        |  2  

数据库是 postgres 9.2。

谢谢

这是我的错,

set price = x.price + 2 
错了,更新到
set price = tbla.price + 2
.

这样调整过滤器:

((tbla.price > x.price) OR (x.id = tbla.id AND tbla.price = x.price)) AND x.id_product = tbla.id_product

查询现在有效:

UPDATE mytable tbla set price = tbla.price + 2 FROM (      SELECT price, id, id_product FROM mytable WHERE distance = 7) x WHERE ((tbla.price > x.price) OR (x.id = tbla.id AND tbla.price = x.price)) AND x.id_product = tbla.id_product

谢谢

最佳答案

首先尝试发现检索应更新行的 SELECT 查询,例如:

SELECT *
FROM mytable m
JOIN mytable m1
ON m.id_product = m1.id_product
AND m.price >= m1.price
AND m1.distance = 7
;

然后更新此查询返回的行:

UPDATE mytable SET price = price + 2
WHERE id IN (
SELECT m.id
FROM mytable m
JOIN mytable m1
ON m.id_product = m1.id_product
AND m.price >= m1.price
AND m1.distance = 7
);

演示 --> http://www.sqlfiddle.com/#!12/f5d59/4

为了清楚起见,演示中的查询更新了一个附加列 new_price 而不是 price:

UPDATE mytable SET new_price = price + 2 .....

关于sql - 请愿书有条件更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19340399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com