有没有一种简单的转换方法name:value children 到postgresql中的列?

dsekswqp  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(353)

我有一个模式,其中emp表有一个子表emp\u属性,即名称-值对,因此。。。

emp: id, name
emp_attribute:  id, emp_id, name, value

一个典型的emp(id=1,name=juan)的子属性title=manager,education=degree,nationary=spaine,等等
我是否可以运行一个查询,将所有emp\u属性行合并到一个元组中

id   |    name     |   title     |   education    |    nationality
1    |    Juan     |   manager   |   degree       |    spain

作为背景,我之所以采用这种方法,是因为属性列表在不断变化,而且对于不同类别的员工来说是不同的。我不想为了支持新属性而改变模式。我确实考虑过json数据类型,但我更希望保持尽可能的关系。

vcudknz3

vcudknz31#

您可以执行联接表和条件聚合:

select
    e.id
    max(ea.value) filter(where ea.name = 'name') name,
    max(ea.value) filter(where ea.name = 'title') title,
    max(ea.value) filter(where ea.name = 'education') education,
    max(ea.value) filter(where ea.name = 'nationality') nationality
from emp e
inner join emp_attribute ea on ea.emp_id = e.id
group by e.id

相关问题