问题描述
我在 netezza 中有一张需要更新的表。我正在使用的列是
表A
- ID_NO
- ENTRY_DATE
- 价格
表 B
- ID_NO
- 开始日期
- END_DATE
- 价格
因此数据示例如下所示:
表A
ID_NO | ENTRY_DATE | 价格 |
---|---|---|
123 | 2020-05-01 | |
123 | 2020-08-15 |
表 B
ID_NO | START_DATE | END_DATE | 价格 |
---|---|---|---|
123 | 2019-01-01 | 2019-11-01 | 7.64 美元 |
123 | 2020-04-30 | 2020-05-02 | $6.19 |
123 | 2020-04-15 | 2020-08-30 | $2.19 |
我需要将表 A 中的价格更新为表 B 中的最高价格,其中 a.ENTRY_DATE 介于 b.START_DATE 和 b.END_DATE 之间。所以决赛桌应该是这样的:
表A
ID_NO | ENTRY_DATE | 价格 |
---|---|---|
123 | 2020-05-01 | $6.19 |
123 | 2020-08-15 | $2.19 |
这是我到目前为止所拥有的,但它最终只是采用适合任一行的最高价格,而不是对每一行进行计算:
update TABLE_A
set PRICE=(select max(b.PRICE)
from TABLE_B b
inner join TABLE_A a on a.ID_NO=b.ID_NO
where a.ENTRY_DATE between b.START_DATE and b.END_DATE)
解决方法
我无法访问 Netezza,但通常的格式是使用相关子查询。
也就是说,不是在查询中再次包含 viewer.dart
,而是引用外部引用 TABLE_A
...
TABLE_A
通过这种方式,相关子查询基本上为 update
TABLE_A
set
PRICE = (
select max(b.PRICE)
from TABLE_B b
where TABLE_A.ID_NO = b.ID_NO
and TABLE_A.ENTRY_DATE between b.START_DATE and b.END_DATE
)
中的每一行调用一次,并且该调用使用 TABLE_A
中的当前行作为其参数。
另一种可能是...
TABLE_A