【发布时间】:2017-10-27 03:18:09
【问题描述】:
希望你们都做得很好!
我正在尝试使用多个连接对表运行批量更新,但我无法这样做。
我有 3 张桌子:
表 1:items
|id|total_price|created_at|
表 2:prices
|id|company_id|item_id|special_price|created_at|
________________________________________________
| 1| 1 | 100 | 20.0 | 2017-01-01|
| 2| 1 | 101 | 30.0 | 2017-01-01|
| 3| 1 | 102 | 70.0 | 2017-01-01|
| 4| 1 | 103 | 90.0 | 2017-01-01|
表 3:ranges
|id|company_id|range_from|range_to|commission_percent|
______________________________________________________
| 1| 1 | 10.0 | 50.0 | 5.0 |
| 2| 1 | 51.0 | 100.0 | 10.0 |
我想达到的结果:我想根据以下 SQL 批量更新 prices 表:
UPDATE prices
SET special_price = (
CASE
WHEN (special_price BETWEEN ranges.range_from AND ranges.range_to) AND prices.company_id = ranges.company_id
THEN
ROUND((special_price + (special_price * commission_percent / 100)), 2)
ELSE
special_price
END
)
FROM ranges
WHERE prices.company_id = 1
结果如下:
|id|company_id|item_id|special_price|created_at|
________________________________________________
| 1| 1 | 100 | 21.0 | 2017-01-01|
| 2| 1 | 101 | 31.5 | 2017-01-01|
| 3| 1 | 102 | 77.0 | 2017-01-01|
| 4| 1 | 103 | 99.0 | 2017-01-01|
到目前为止我遇到的限制:
- 它始终在定义的第一个范围内运行,从不为定义的第二个范围执行。
- 我尝试使用各种方法来做到这一点,但都没有得到令人满意的结果。
IMP 我将对prices 表中的数百万条记录执行此操作
请帮助/建议!
【问题讨论】:
标签: sql postgresql