我正在数据库中存储键值对以帮助规范化。 我想做的是根据某个标识符(例如"Apple"或"Banana")遍历所有匹配的键/值,并生成一个等效于键/值对的"完整"表版本的视图。 请参阅下面的小提琴以获取更多信息:
小提琴
我想我将不得不使用各种游标,但不确定此类问题的"最佳"方法。
假设您的 ID 在您的视图中唯一标识了所需的行(它们在您的 Fiddle 示例中没有),您可以创建如下视图:
create view details_view as
select id,
max(case when key='Color' then value end) as color,
max(case when key='Location' then value end) as location,
max(case when key='Price' then value end) as price,
from details
group by id;
我曾经写过一个包来帮助生成这样的查询 - 请参阅我的博客。 (我在这里也反对这种数据模型!
你的小提琴很明显你的数据设计是有缺陷的。除了使用可怕的EAV模型(如Tony Andrews指出的那样)之外,您还有一个问题,即表中没有主键。
不可能知道苹果的颜色、位置和价格。按照目前的设置,不可能知道德克萨斯州的苹果是红色还是绿色。
小提琴示例的最佳方法是像这样更改架构:
table fruit_details
(
id INTEGER, /* Generate using sequence */
fruit_type varchar2(50),
location varchar2(100),
price number(8.2)
);
每个对象的 id 必须是唯一的。然后,该类型可以成为另一个键。
小提琴