【发布时间】:2022-01-02 00:04:13
【问题描述】:
有人可以帮我解决以下问题吗?
假设我有一个数据库,其中包含所有车辆和道路上方用于扫描车牌的某种雷达。在雷达扫描完车牌后,它会被添加到 DB2 数据库中。
第一个表包含所有已知的具有开始日期和可能结束日期的车辆。 每当汽车的颜色发生变化时,都会填写结束日期并创建一个新的记录并使用新的开始日期(这都是手动完成的)
第二个表格包含汽车驶过马路的时间。
Cars:
| ID | Plate | color | Start | end |
|---|---|---|---|---|
| 1 | Name1 | Blue | 2021-01-01 | 2021-01-04 |
| 2 | Name2 | Red | 2021-01-01 | null |
| 3 | Name1 | Purple | 2021-01-05 | null |
Registrations:
| ID | Plate | Date | carID |
|---|---|---|---|
| 1 | Name1 | 2021-01-01 | null |
| 2 | Name2 | 2021-02-01 | null |
| 3 | Name1 | 2021-03-01 | null |
| 4 | Name1 | 2021-04-01 | null |
| 5 | Name1 | 2021-05-01 | null |
我们最近添加了 carID 列,但它需要被填充,所以最终它应该是这样的:
Registrations:
| ID | Plate | Date | carID |
|---|---|---|---|
| 1 | Name1 | 2021-01-01 | 1 |
| 2 | Name2 | 2021-02-01 | 2 |
| 3 | Name1 | 2021-03-01 | 1 |
| 4 | Name1 | 2021-04-01 | 3 |
| 5 | Name1 | 2021-05-01 | 3 |
我试图通过以下查询来做到这一点:
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 注册已更新,但是当我检查数据库时,实际上没有任何变化。
【问题讨论】:
-
Name1,是车主/司机的名字,还是汽车品牌?
-
您描述的任何表格中都没有车牌列,如果在任何表格中为空,则更新将12902 carID设置为空