我需要用这个逻辑更新一个表:查找一个过滤字段='某个值'的行,让我们调用这个“选定行”,然后更新“选定行”本身和订单字段的行是>所选行顺序字段:
例如,我想增加价格值> 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
感谢
答案 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 .....