sql - 有没有一种简单的方法可以将 name:value 子级转换为 postgresql 中的列?
问题描述
我有一个模式,其中 EMP 表有一个子表 EMP_ATTRIBUTE,它是名称值对,因此......
emp: id, name
emp_attribute: id, emp_id, name, value
一个典型的 emp(id=1,name=Juan)会有子属性 title=manager,education=degree,nationality=spain 等等
有没有我可以运行的查询,它将所有 emp_attribute 行组合成一个元组
id | name | title | education | nationality
1 | Juan | manager | degree | spain
作为背景,我采用这种方法的原因是属性列表是不断变化的,并且对于不同类别的员工是不同的。我不想为了支持新属性而进行架构更改。我确实考虑过 JSON 数据类型,但我希望尽可能保持相关性。
解决方案
您可以加入表,并进行条件聚合:
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
推荐阅读
- python - 避免在更新参数中没有 .caption(或 user.id 或.....)时收到错误(“NoneType”类型的参数不可迭代)
- c - fscanf() 如何处理双精度值?
- javascript - JavaScript:从文件阅读器中提取 base64 字符串
- ios - 减少文本字段中左视图和光标之间的差距
- amazon-web-services - AWS Cognito 角色限制调用 Lambda 的权限
- javascript - 在移动设备上将按空格键更改为屏幕按钮
- sas - 如何读取流内数据
- css - 我应该在哪里放置 OctoberCMS 的图像文件
- pointers - 无法附加到函数内的切片
- html - 如何使用css在圆形按钮内居中div