请愿书的有条件更新

时间:2013-10-12 23:53:28

标签: sql postgresql

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

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

mytable
id | price | id_product | distance
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。

谢谢

这是我的错,

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

感谢

1 个答案:

答案 0 :(得分: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 .....