【发布时间】:2017-03-28 19:24:38
【问题描述】:
我正在使用 Oracle 11g 数据库。我有一个项目表,其中包含一个表示项目相关产品的字段。 products 字段中的数据可能包含也可能不包含由逗号分隔的连接值列表,其中每个值对应于包含产品名称的备用查找表中的产品 ID。如果 products 字段中至少存在一个产品值,则该字段将以逗号开头和结尾。
项目表 ╔══════╦═══════════════════╗ ║ 项目 ║ 产品 ║ ╠══════╬═══════════════════╣ ║ 12 ║ ,101,102,103, ║ ║ 34 ║ ,103,105, ║ ║ 56 ║ ,101,102,104,105, ║ ║ 78 ║ ║ ║ 90 ║ ,102, ║ ╚══════╩═══════════════════╝ 产品表 ╔════════════╦══════╗ ║ PRODUCT_ID ║ 名称 ║ ╠════════════╬══════╣ ║101║PA║ ║ 102 ║ 铅 ║ ║ 103 ║ 电脑 ║ ║104║PD║ ║ 105 ║ 体育 ║ ╚════════════╩══════╝我的目标是执行 SELECT 查询,以通过垂直条获取项目列表及其串联的产品名称,但我不知道如何到达那里。
期望的结果 ╔══════╦═════════════╗ ║ 项目 ║ 产品 ║ ╠══════╬═════════════╣ ║ 12 ║ PA|PB|PC ║ ║ 34 ║ 个人电脑|体育 ║ ║ 56 ║ PA|PB|PD|PE ║ ║ 78 ║ ║ ║ 90 ║ 铅 ║ ╚══════╩═════════════╝感谢任何帮助或指导。
【问题讨论】:
-
这是一个错误的数据库设计。您不应该在表格中使用逗号分隔的值,这违反了规范化。您的表格甚至不是第一范式。
-
@apatto03 - 您使用的是哪个版本的 Oracle?
-
理解并同意;它不是来自我们设计或控制的数据库。
-
@GurV Oracle DB 11.2.0.3.0