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

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

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

  1. emp: id, name
  2. emp_attribute: id, emp_id, name, value

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

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

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

vcudknz3

vcudknz31#

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

  1. select
  2. e.id
  3. max(ea.value) filter(where ea.name = 'name') name,
  4. max(ea.value) filter(where ea.name = 'title') title,
  5. max(ea.value) filter(where ea.name = 'education') education,
  6. max(ea.value) filter(where ea.name = 'nationality') nationality
  7. from emp e
  8. inner join emp_attribute ea on ea.emp_id = e.id
  9. group by e.id

相关问题