PostgreSQL数据库表A的列有id,config,mch,pch,lgp,customs,对应的值为1,'E','{aa,bb}','{cc,dd}','{ee}','{lgd,boe}',现创建1个视图将表A的数据完全展开显示,不出现数据冗余,sql怎么写?
时间: 2024-10-17 14:13:17 浏览: 23
你可以使用PostgreSQL的JSON函数和CASE表达式来创建这个视图。假设你想按列名分别展示每个JSON字段的内容,可以创建如下的视图:
```sql
CREATE VIEW view_A_expanded AS
SELECT
id,
config,
CASE WHEN pch IS NOT NULL THEN unnest(pch) ELSE NULL END AS pch,
CASE WHEN lgp IS NOT NULL THEN unnest(lgp) ELSE NULL END AS lgp,
CASE WHEN customs IS NOT NULL THEN unnest(customs) ELSE NULL END AS customs,
CASE WHEN custom_key IS NOT NULL THEN custom_key ELSE NULL END AS custom_key -- 如果有customs并且包含custom_key,这里添加处理custom_key
FROM
table_A;
```
这里的`unnest()`函数用于将JSON数组转换成行,如果某个字段是NULL,则该列对应的结果也会为空。
请注意,由于题干中提到`customs`似乎同时包含了数组和键值对,`custom_key`是一个假设的额外需要单独处理的情况。如果有其他特定的键需要提取,请替换`custom_key`并提供相应的处理逻辑。
阅读全文