1

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

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

我的表
编号 | 价格 | id_product | 距离
1 | 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 | 8
10 | 17 | 2 | 1  
11 | 32 | 2 | 13  
12 | 22 | 2 | 2  

数据库是postgres 9.2。

谢谢

是我的错,

设置价格 = x.price + 2
错了,更新到
设置价格 = tbla.price + 2
.

以这种方式调整过滤器:

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

查询现在有效:

更新 mytable tbla 设置价格 = tbla.price + 2
从 (
     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

谢谢

4

1 回答 1

1

首先尝试发现一个 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 .....
于 2013-10-13T09:49:02.790 回答