【发布时间】:2018-11-16 21:36:38
【问题描述】:
我在 db2 上使用 SQL。
运输表:
+--------+------+
| Weight | Cost |
+--------+------+
| 2 | 5 |
| 5 | 10 |
| 10 | 15 |
| 30 | 45 |
| 50 | 80 |
+--------+------+
物品表:
+---------+--------+
| Item ID | Weight |
+---------+--------+
| 1 | 34 |
| 2 | 4 |
| 3 | 9 |
| 4 | 5 |
| 5 | 16 |
+---------+--------+
我想使用重量将适当的运费与商品相关联。因此,如果该项目的重量将关联到等于该重量或下一个大于运输重量表中的重量的运输重量。
我希望我的结果表在 INNER JOIN 之后是:
+---------+-------------+-----------------+---------------+
| Item ID | Item Weight | Shipping Weight | Shipping Cost |
+---------+-------------+-----------------+---------------+
| 1 | 34 | 50 | 80 |
| 2 | 4 | 5 | 10 |
| 3 | 9 | 10 | 15 |
| 4 | 5 | 5 | 10 |
| 5 | 16 | 30 | 45 |
+---------+-------------+-----------------+---------------+
我无法弄清楚如何将运输重量与物品重量相关联。一旦我这样做了,我就可以加入运费。
我尝试使用“WHERE >= Shipping Weight”,但这给了我所有的可能性,我只想要一个等于或次之最好的最好的。我不擅长解释这一点,但我希望您通过查看我想要的结果表来理解我的意思。
谢谢!
【问题讨论】:
-
旁注:我通常对正数的建议是“下限包含,上限不包含”(即
lower <= actual weight < upper- 与您在此处显示的相反)。这样做的原因是处理所有数字的范围:考虑如果任何项目的重量30.00001会发生什么 - 它变得更容易推理(您当前正在存储上限 - 为什么顶部的一个被结转? )/查询,和为其编写合法副本。在这种情况下,您将存储下限,这意味着最高汇率只是正常最后汇率的一部分。 -
此外,无论您存储边界的哪个方向,为了便于使用,我建议创建一个视图或materialized query table(这也可能有助于提高速度,尽管源表可能足够小应该没关系)。