【发布时间】:2021-12-24 11:26:40
【问题描述】:
我在 PostgreSQL 中有一张表需要修改,该表如下所示:
name | value1 | value2 | date
--------+-------+--------+---------
Jonh | | 0.15 | 2021-12-23 00:00:00
Jonh | 0.14 | 0.76 | 2021-12-22 00:00:00
Jonh | 0.19 | 0.87 | 2021-12-21 00:00:00
Jonh | 0.13 | 0.11 | 2021-12-15 00:00:00
Bob | 0.12 | 0.23 | 2021-12-15 00:00:00
拥有name、date 和value1 或value2,我需要创建一个声明:
- 检查是否存在带有
name和date的行(有一个约束键,因此两个值只能有一行) - 在此行中插入值
value1或value2(更新行值,虽然最初此列在行中为空)。
我需要在不同的时间设置value1和value2,所以我需要找到一种创建新行或更新当前行的方法,我使用this answer创建创建或更新行语句,你是怎么做到的?
编辑
场景 1,作为输入,我将有参数:
name='Jonh'
value1 = 0.5
date = '2021-12-23 00:00:00'
在这种情况下,具有此名称和日期的行已经存在,因此它只会更新value1 的值。
决赛桌:
name | value1 | value2 | date
--------+-------+--------+---------
Jonh | 0.5 | 0.15 | 2021-12-23 00:00:00
Jonh | 0.14 | 0.76 | 2021-12-22 00:00:00
Jonh | 0.19 | 0.87 | 2021-12-21 00:00:00
Jonh | 0.13 | 0.11 | 2021-12-15 00:00:00
Bob | 0.12 | 0.23 | 2021-12-15 00:00:00
场景 2,作为我的输入:
name='Tim'
value2 = 1
date = '2021-12-23 00:00:00'
因为没有具有此名称和日期的行,它将创建一个新行,分配value2 并为value1 设置一个NULL 值。
决赛桌:
name | value1 | value2 | date
--------+-------+--------+---------
Tim | | 1 | 2021-12-23 00:00:00
Jonh | | 0.15 | 2021-12-23 00:00:00
Jonh | 0.14 | 0.76 | 2021-12-22 00:00:00
Jonh | 0.19 | 0.87 | 2021-12-21 00:00:00
Jonh | 0.13 | 0.11 | 2021-12-15 00:00:00
Bob | 0.12 | 0.23 | 2021-12-15 00:00:00
【问题讨论】:
-
根据此示例数据,您期望的输出是什么?
-
@TimBiegeleisen 我已经更新了我的问题以添加一些预期的输出
标签: sql postgresql insert sql-update