【发布时间】:2017-03-11 12:52:35
【问题描述】:
给出以下情况: 表 order o 和 products p 是通过多选列表连接的。
产品p:
- 主键 PRODUCT_ID 类似于“101”
- 商店购买价格如“9.25”
下单:
- 主键 ORDER_ID 类似于“123456”
- 将所有包含的产品存储在一个名为 prod 的列中,例如“:101:199:250:999:”
- 将所有包含的单价存储在名为“:10.0:25.0:30.5:125.25:”的列中
例如,订单 123456 包含四种产品。 id 101 的产品以10.0$ 出售(而购买价格为9.25$),id 199 的产品以25.0$ 出售等等......
所以对我来说最具挑战性的部分是从多选列表中提取所需的值。
如何根据订购的产品提取价格以回答诸如“id = 999 的产品的平均销售价格是多少?”之类的问题
我已经尝试过类似的方法:
SELECT MOD(INSTR(o.products, ':999:'),3) FROM orders o;
返回值的位置。
由于我不是PL/SQL 程序员,我不知道如何继续处理这个问题......
欢迎提出想法。
【问题讨论】:
-
您首先不应该将多个分隔值存储在单个列中。阅读数据库规范化
-
是的,我知道这一点......使用带有 order_id 和 product_id 键的第三个表会更有效。尽管如此,解决方案应该基于多选列表......:-/
-
这行不通。我确信这方面的聪明人可以提供一些可行的功能代码;但是一旦你尝试扩展系统,就会出现问题。所以真正的答案是修复设计。
-
请告诉我这是一项学校作业,而不是某个正在生产的系统
-
@APC 如果它在某处生产,它不会持续很长时间。
标签: sql oracle plsql oracle11g