有人能帮我解决以下问题吗?
假设我有一个数据库,里面有所有的车辆,还有一个雷达,它在道路上方扫描车牌,当雷达扫描车牌后,它就被添加到DB2数据库中。
第一个表包含所有已知的具有开始日期和可能的结束日期的车辆。每当汽车的颜色改变时,结束日期将被填充,并且将使用新的开始日期创建新的记录(这都是手动完成的)
第二个表包含汽车何时驶过道路。Cars
:
| 识别码|印版|色彩|启动时间|结束|
| - -|- -|- -|- -|- -|
| 一个|名称1|蓝色|2021年1月1日|2021年1月4日|
| 2个|名称2|红色|2021年1月1日|零值|
| 三个|名称1|紫色|2021年1月5日|零值|Registrations
:
| 识别码|印版|日期|卡ID|
| - -|- -|- -|- -|
| 一个|名称1| 2021年1月1日|零值|
| 2个|名称2| 2021年2月1日|零值|
| 三个|名称1| 2021年3月1日|零值|
| 四个|名称1| 2021年4月1日|零值|
| 五个|名称1| 2021年5月1日|零值|
我们最近添加了carID列,但需要填充它,因此最后它应该如下所示:Registrations
:
| 识别码|印版|日期|卡ID|
| - -|- -|- -|- -|
| 一个|名称1| 2021年1月1日|一个|
| 2个|名称2| 2021年2月1日|2个|
| 三个|名称1| 2021年3月1日|一个|
| 四个|名称1| 2021年4月1日|三个|
| 五个|名称1| 2021年5月1日|三个|
我尝试使用以下查询来完成此操作:
UPDATE registrations r
SET r.carID = (
SELECT c.ID
FROM cars c
WHERE c.plate= r.plate
AND r.date >= c.start
AND r.date < c.end
OR c.plate= r.plate
AND r.date >= c.start
AND c.end = null
)
查询运行后,我得到的结果是12902个注册已更新,但当我检查数据库时,实际上没有任何更改。
1条答案
按热度按时间t9aqgxwy1#
我的意思是,你需要在where语句中设置右括号,并将
= null
替换为is null
:DB2 online fiddle