原本字段recent_price_avg中为{"avg1": 7},为什么执行UPDATE sheet_sale_detail SET recent_price_avg = COALESCE( jsonb_set(recent_price_avg, '{0,avg1}', '6',false), '{"avg1": 6}' ) where item_id = 54209 后,recent_price_avg没有变化
时间: 2024-04-14 20:29:10 浏览: 99
根据你提供的信息,字段recent_price_avg原本的值为`{"avg1": 7}`。执行以下SQL语句后,字段recent_price_avg不会发生变化:
```sql
UPDATE sheet_sale_detail
SET recent_price_avg = COALESCE(
jsonb_set(recent_price_avg, '{0,avg1}', '6', false),
'{"avg1": 6}'
)
WHERE item_id = 54209
```
这是因为在这个更新语句中,COALESCE函数会首先尝试使用jsonb_set函数更新键名为"avg1"的键值对为6。然而,由于设置了第四个参数为false,表示在键名已存在时不进行更新。因此,由于"avg1"已经存在且值为7,所以jsonb_set函数不会进行更新。
当jsonb_set函数无法更新键值对时,COALESCE函数会返回第二个参数`'{"avg1": 6}'`作为默认值。但由于字段recent_price_avg原本的值不为空,所以COALESCE函数并不会使用默认值。
如果你想要更新字段recent_price_avg中的键名为"avg1"的键值对,可以直接使用以下SQL语句:
```sql
UPDATE sheet_sale_detail
SET recent_price_avg = jsonb_set(recent_price_avg, '{0,avg1}', '6', true)
WHERE item_id = 54209
```
这条语句中的jsonb_set函数的第四个参数设置为true,表示在键名已存在时进行更新操作。这样就能将键名为"avg1"的键值对的值更新为6。
阅读全文