我有一个简单的YAML。
- name: name_1
k1: v1_1
k2: v2_1
k3: v3_1
- name: name_2
k1: v1_2
k2: v2_2
k3: v3_2
- name: name_3
k1: v1_3
k2: v2_3
k3: v3_3
属性'名称可能因不同项目而异。
我想把这个yaml数据放到sqlite数据库中。因此,我创建了两个表:obj
和attr
Table:obj
obj_id name
---------- ----------
1 name_1
2 name_2
3 name_3
Table: attr
id obj_id key value
---------- ---------- ---------- ----------
1 1 k1 v1_1
2 1 k2 v2_1
3 1 k3 v3_1
4 2 k1 v1_2
5 2 k2 v2_2
6 2 k3 v3_2
7 3 k1 v1_3
8 3 k2 v2_3
9 3 k3 v3_3
我希望输出如下:
obj_id name k1 k2 k3
---------- ---------- ---------- ---------- ----------
1 name_1 v1_1 v2_1 v3_1
2 name_2 v1_2 v2_2 v3_2
3 name_3 v1_3 v2_3 v3_3
我使用此查询:
select *
from
obj
natural join (select obj_id, value as k1 from attr where key = 'k1' )
natural join (select obj_id, value as k2 from attr where key = 'k2' )
natural join (select obj_id, value as k3 from attr where key = 'k3' )
;
这可以产生很多单词的输出。 而且,在另一个项目中,属性名称可能会改变,让我们说该属性可能是(k4,k5,k6)。 我必须再次重写这个查询。
我有两个问题: